【发布时间】:2017-07-19 07:55:44
【问题描述】:
我正在尝试使用此answer 使用subprocess.Popen 使用nohup 发出一个长时间运行的进程,然后退出连接。
如果我从登录 shell 运行
$ nohup sleep 20 &
$ exit
我得到了预期的行为,即我可以在睡眠过程仍在运行时注销,稍后再连接以检查其状态。但是,如果我通过 Python 尝试相同的操作,似乎 exit 命令在睡眠时间结束之前不会被执行。
import subprocess
HOST=<host>
sshProcess = subprocess.Popen(['ssh', HOST],
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
universal_newlines = True,
bufsize = 0)
sshProcess.stdin.write("nohup sleep 20 &\n")
sshProcess.stdin.write("exit\n")
sshProcess.stdin.close()
我错过了什么?
【问题讨论】:
-
为什么不只是
subprocess.Popen(['ssh', HOST, 'nohup', 'sleep', '20'], stdin = subprocess.PIPE, stdout = subprocess.PIPE)? -
因为我的 Python 进程会一直运行直到睡眠完成,而我想发出命令(这将是一个长时间运行的 Python 进程)然后退出并做其他事情。
-
您可以从
Popen中删除管道以在后台运行。更多信息在这里stackoverflow.com/a/7224186/524743
标签: python ssh subprocess nohup