Python子流程.Popen没有出口,就被吊死了

2024-10-05 14:26:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用子流程.Popen调用控制台应用程序。控制台应用程序本身调用另一个子进程来执行下载操作。父进程一旦调用子进程就退出。在

我能够在命令提示符下手动运行脚本时获得子进程的输出。在

但是子流程.Popen在系统环境中运行脚本时被挂起(post commit hook)。子进程无法退出。在

 p1 = subprocess.Popen([Application,arg1, arg2, arg3], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
 Down_out = p1[0]
 Down_Err = p1[1]

提前谢谢


Tags: 脚本应用程序进程系统手动流程postdown
1条回答
网友
1楼 · 发布于 2024-10-05 14:26:12

从您提供的信息中很难说,但可能是arguments是一个包含多个参数的字符串,而这些参数应该拆分为列表中的多个元素。如果将所有参数合并为一个字符串,则正在执行的程序的行为将与预期的不同。

例如:

>>> from subprocess import Popen
>>> Popen(['touch', '/tmp/testing /tmp/foo']).communicate()
touch: cannot touch ‘/tmp/testing /tmp/foo’: No such file or directory
(None, None)
>>> Popen(['touch', '/tmp/testing', '/tmp/foo']).communicate()
(None, None)

在第一个字符串中,'/tmp/testing /tmp/foo'是一个字符串。

第二个元素是列表中的两个独立元素。一切如期而至。

我猜你的死是因为无效的论点。

相关问题 更多 >