【发布时间】:2018-03-22 12:20:15
【问题描述】:
运行子进程在 Windows 上本地工作,但当我在 linux 机器上添加脚本并运行它时不起作用。确实创建了一个子进程对象,但它只是挂起并在那里等待。
这是我正在运行的脚本:
p = subprocess.Popen(["php", "random.php", username, password], stdout=subprocess.PIPE, shell=True)
p.wait()
我查看了 php ini,禁用了功能,但它是空的。我尝试添加 a = p.communicate() 和 print a 但这不会打印任何内容
我能做的事情已经不多了,我还能做些什么来调试它为什么不起作用?
谢谢
【问题讨论】:
-
一种调试方法是尝试读取
p.stdout(标准输出),并检查p.wait()返回的返回码。另外,如果可能,请尝试摆脱shell=True(在Windows 上尝试where php,在Linux 上尝试which php,它们可能是2 种不同的对象类型(.bat/.exe...) -
尝试使用
communicate.... The docs sayWarning: This will deadlock when using stdout=PIPE and/or stderr=PIPE ....并建议使用communicate来避免这个问题。 -
@sytech 在将 stdout 和 stderr 都重定向到
PIPE而不使用communicate时出现死锁。哦,但你是对的(我并不是在暗示其他情况:如果你重定向,读取输出)
标签: python python-2.7 subprocess