【发布时间】:2017-09-11 22:47:56
【问题描述】:
我正在尝试实现需要运行外部可执行文件的 python 代码。经过一番研究,我找到了subprocess 模块并尝试了它。但是,当我运行代码时,子进程退出并返回一个 CompletedProcess 对象,这对我来说是不行的,因为我正在使用的 .exe 实际上是一个 continuous 程序,它需要输入和在关闭之前生成输出。 (我的程序将发送输入并接收输出。)
所以这段代码失败了。
import subprocess
proc = subprocess.run("some.exe", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(proc) # To see what it is.
它捕获程序首先在标准输出中输出,然后退出,而不是期待新的输入。
我在这里的术语也有问题,我使用的这个可执行文件能够运行命令同时仍然能够接收新命令,这称为 异步 还是 非阻止 ?
我的问题,正确的处理方法是什么?有很多问题与此非常接近,但我不确定哪些是在回答我的问题或以现代方式回答它(有非常古老的问题)。
看起来subprocess 模块在 Python 3.6.1 https://docs.python.org/3/library/subprocess.html 中发生了一些变化
因此,最好能以最新的方式提供解决方案,或者至少提及更新的方式及其运作方式。
我正在使用 Windows 10,Python 3.6.1
Edit1:我遇到过subprocess.Popen,这可能是我需要的,但我还没有发现它是如何正确使用的。
Edit2: 模块pexpect 似乎是为这类问题而设计的,但我不确定使用它是否会让我的时间更轻松。任何建议表示赞赏。
【问题讨论】:
-
这些“输入”能否简单地写入子进程调用的命令中?
-
@JacobIRR,是的,请原谅我没有提及,这是一个控制台应用程序,直接从标准输入接收输入。我可以直接运行它并测试输入,这需要我的 Python 应用程序来代替我来完成。
-
但是输入不是预先确定的,我一开始调用程序时不能给所有输入。
标签: python python-3.x subprocess