Python Subprocess.Popen没有退出,它被绞死了

时间:2013-12-11 07:37:10

标签: python svn subprocess post-commit-hook

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

我可以在命令提示符下手动运行脚本时获取子进程的输出。

但是subprocess.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]

提前致谢

1 个答案:

答案 0 :(得分:0)

很难从您提供的信息中说出来,但可能是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'是一个字符串。

在第二个中,它是列表中的两个独立元素。那是按预期运行的。

我猜你的是由于无效的论据而挂起。