2016-11-08 97 views
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进程是一个自动化的进程。

+0

你的“cmd”是什么? – Hannu

+0

cmd不过是列表[

1

proc.communicate()调用将阻塞,直到用于stderrstdout管道被关闭。如果你的shell脚本产生一个继承这些管道的子进程,那么只有在该进程也关闭了其管道的写入结束或退出之后它才会退出。

为了解决这个问题,你可以

  • 的启动子的输出重定向到/dev/null或在你的shell脚本日志文件,如:
    subprocess_to_start >/dev/null 2>&1 &
  • 使用subprocess.DEVNULLstderr一个打开的文件对象和stdout放在你的python脚本中,如果你不需要python中的“shellscript”的输出,则放弃communicate()调用