使用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”调用结束。他们返回命令提示符时没有问题。
答案 0 :(得分:0)
什么是调用shell脚本并始终返回控制的可靠方法 到我的python程序?
如果您使用的是管道,这将取决于您的脚本;更一般的答案基本上是halting problem,即使强大的StackOverflow也无法帮助你。
我鼓励您深入挖掘并尝试创建一个可重现的案例,以便我们可以帮助您解决您所看到的特定问题。
修改强>
如果您不需要管道,那么只需省略stdout和stderr参数(或将它们设置为PIPE
以外的其他参数)。请参阅python subprocess management。