在Python中与另一个命令行程序交互

8 python command-line subprocess

我需要编写一个Python脚本,它可以运行另一个命令行程序并与它的stdin和stdout流进行交互.本质上,Python脚本将从目标命令行程序读取,通过写入其stdin进行智能响应,然后再次从程序中读取结果.(它会反复这样做.)

我已经查看了子进程模块,我似乎无法让它执行我正在寻找的读/写/读/写操作.还有什么我应该尝试的吗?

Ale*_*lli 7

要执行这样详细的交互(当你的控件之外,其他程序可能正在缓冲其输出,除非它认为它正在与终端通信)需要像pexpect这样的东西- 这反过来又需要pty一个Python标准库模块(运行时)允许它的系统,如Linux和Mac OS x)实现"伪终端".

Windows上的生活更难,但也许这个zipfile可以提供帮助 - 它应该是pexpectWindows的一个端口(抱歉,我没有Windows机器来检查它).有问题的项目叫做wexpect生活在这里.


Anu*_*yal 4

请参阅问题 wxPython:如何创建 bash shell 窗口?

在那里,我与 bash shell 进行了全面的交互,读取 stdout 和 stderr 并通过 stdin 进行通信

主要部分是此代码的扩展

bp = Popen('bash', shell=False, stdout=PIPE, stdin=PIPE, stderr=PIPE)
bp.stdin.write("ls\n")
bp.stdout.readline()
Run Code Online (Sandbox Code Playgroud)

如果我们读取所有数据,它将被阻止,因此我给出的脚本链接会在线程中进行。这是一个完整的 wxpython 应用程序,部分模仿 bash shell。