python - 在Linux服务器上运行子进程不起作用,但在Windows上本地运行

标签 python python-2.7 subprocess

运行子进程可以在 Windows 上本地运行,但当我在 Linux 机器上添加脚本并运行它时,它不起作用。子进程对象确实被创建,但它只是挂起并在那里等待。

这是我正在运行的脚本:

p = subprocess.Popen(["php", "random.php", username, password], stdout=subprocess.PIPE, shell=True)

p.wait()

我查看了 php ini,禁用的功能,它是空的。我尝试添加 a = p.communicate()print a 但这不会打印任何内容

我已经无能为力了,我还能做些什么来调试它为什么不起作用吗?

谢谢

最佳答案

一个好的线索是进程会阻塞,因为您正在使用重定向,但不消耗输出。根据操作系统和缓冲区大小,这可能有效,也可能无效。

如果进程结束时没有输出太多,因此输出管道没有填满,则它将正常工作,否则将阻塞。

看来你不想要输出,你只是想让过程安静。在这种情况下,不要使用 subprocess.PIPE

进行重定向

Python 3 有 subprocess.DEVNULL

p = subprocess.Popen(["php", "random.php", username, password], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)

Python 2 没有,但你可以伪造它

with open(os.devnull,"w") as f:
   p = subprocess.Popen(["php", "random.php", username, password], stdout=f, stderr=f)

然后:

rc =p.wait()

检查返回代码

关于python - 在Linux服务器上运行子进程不起作用,但在Windows上本地运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49428562/

相关文章:

python - 编码参数适用于 pandas.read_excel 吗?

python - connman 连接到服务 : DBus UnknownMethod

python - 限制抽象类的子类可以吗?

python - 在 python 请求中包含多个 header

python - 无法安装 Python 包 [SSL : TLSV1_ALERT_PROTOCOL_VERSION]

python - 我如何在 python 中使用 wsdl url

python - subprocess.call 和 tar -zxvf

python - 如何监控可变对象的变化?

python - 嵌套子进程不停止

Python:使用 sh 运行 docker 容器并处理 UTF-8 解码错误