8

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

我已经查看了 subprocess 模块,但我似乎无法让它完成我正在寻找的读/写/读/写的事情。还有什么我应该尝试的吗?

4

2 回答 2

7

要执行如此详细的交互(当在您的控制之外,其他程序可能正在缓冲其输出,除非它认为它正在与终端交谈)需要类似pexpect的东西——这反过来又需要pty一个 Python 标准库模块(在运行时)允许它的系统,例如 Linux 和 Mac OS x)实现“伪终端”。

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

于 2009-06-20T05:12:42.923 回答
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()

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

于 2009-06-20T05:06:06.567 回答