【发布时间】:2012-06-04 04:36:10
【问题描述】:
使用python 3.2,以及如下代码sn-p:
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' 结束,它们毫无问题地返回命令提示符。
【问题讨论】:
-
可能是您的脚本正在做的事情(产生另一个进程)?
-
我的代码片段调用了各种shell脚本。它们要么启动一个新进程,要么停止一个现有进程。有些工作,有些不工作。但在所有情况下,shell 脚本都可以在命令提示符下运行良好,不会产生任何错误,并且会执行应有的操作。我试图自动调用我们现有的生产脚本,所以对它们进行更改是不可能的。
-
我并不是建议您进行任何更改,我只是给您一个提示,一些需要寻找的东西,这可能有助于您确定问题的原因。
标签: subprocess python-3.2