使用 python 3.2 和以下代码片段:
p = subprocess.Popen(['../start_server.sh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out,err = p.communicate()
if out != None :
out = out.decode('utf-8')
if err != None :
err = err.decode('utf-8')
print('out ',out)
print('err ',err)
在一些 shell 脚本上,它工作得很好,我得到了我的输出。在其他人它只是挂起。但在每种情况下,shell 脚本都从命令行运行而没有错误。我能看到的唯一共同点是(通常)挂起的那些输出为零。当事情失败时,我检查正在运行的进程,我看到我的 shell 脚本没有列出,python 脚本仍在运行
调用 shell 脚本并始终将控制权返回给我的 python 程序的可靠方法是什么?
编辑:
使用管道 Popen 等不是必需的,唯一的要求是当 shell 脚本退出时控制权返回给我的 python 脚本。如果 shell 脚本永远不会返回到命令提示符,那么我的 python 脚本也永远不会返回。
因此,假设我调用的 shell 脚本总是返回到命令提示符,我怎样才能将控制权返回给我的 python 程序?
如果有比上面列出的更好的方法-请赐教
我发现的另外一点是“挂起”的 shell 脚本似乎以调用“nohup”结束,他们毫无问题地返回命令提示符。