0
我正在执行一个shell脚本,它启动一个具有后台选项&的进程。 shell脚本从挂起的python脚本调用。subprocess popen Python
shell脚本:
test -f filename -d &
Python文件
cmd =["shellscript","restart"]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, stdin=subprocess.PIPE, **kwargs)
pid = proc.pid
out, err = proc.communicate()
returncode = proc.poll()
Python的文件挂起,并不会返回了蟒蛇的过程。另外python进程是一个自动化的进程。
你的“cmd”是什么? – Hannu
cmd不过是列表[
到
proc.communicate()
调用将阻塞,直到用于stderr
和stdout
管道被关闭。如果你的shell脚本产生一个继承这些管道的子进程,那么只有在该进程也关闭了其管道的写入结束或退出之后它才会退出。为了解决这个问题,你可以
/dev/null
或在你的shell脚本日志文件,如:subprocess_to_start >/dev/null 2>&1 &
subprocess.DEVNULL
或stderr
一个打开的文件对象和stdout
放在你的python脚本中,如果你不需要python中的“shellscript”的输出,则放弃communicate()
调用来源
2016-11-08 13:44:27 mata