gpt4 book ai didi

subprocess - python子进程通信挂起调用shell脚本

转载 作者:行者123 更新时间:2023-12-05 08:02:02 24 4
gpt4 key购买 nike

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

最佳答案

Whats a reliable way to call a shell script and always return control to my python program?

如果您使用管道,这将取决于您的脚本;一个更一般的答案本质上是 halting problem甚至强大的 StackOverflow 也帮不了你。

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

编辑

如果您不需要管道,则只需省略 stdout 和 stderr 参数(或将它们设置为 PIPE 以外的参数)。参见 python subprocess management .

关于subprocess - python子进程通信挂起调用shell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10807875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com