3

使用 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”结束,他们毫无问题地返回命令提示符。

4

1 回答 1

0

调用 shell 脚本并始终将控制权返回给我的 python 程序的可靠方法是什么?

如果您使用管道,这将取决于您的脚本;一个更一般的答案本质上是停止问题,即使是强大的 StackOverflow 也无法帮助您解决这个问题。

我鼓励您深入挖掘并尝试创建一个可重现的案例,以便我们可以帮助您解决您遇到的特定问题。

编辑

如果您不需要管道,则只需省略 stdout 和 stderr 参数(或将它们设置为 以外的其他值PIPE)。请参阅python 子进程管理

于 2012-05-30T20:15:57.183 回答