我正在使用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]
提前致谢
答案 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'
是一个字符串。
在第二个中,它是列表中的两个独立元素。那是按预期运行的。
我猜你的是由于无效的论据而挂起。