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

Posted

技术标签:

【中文标题】在 Python 中与另一个命令行程序交互【英文标题】:Interacting with another command line program in Python 【发布时间】:2010-11-04 11:50:06 【问题描述】:

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

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

【问题讨论】:

重复***.com/questions/163542/…、***.com/questions/250700/…、***.com/questions/465421/…等 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

查看问题 wxPython: how to create a bash shell window?

我已经与 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 应用程序。

【讨论】:

以上是关于在 Python 中与另一个命令行程序交互的主要内容,如果未能解决你的问题,请参考以下文章

第一个Python程序

第一个Python程序

python中命令行模式和交互模式

我可以在bash脚本中与OSX“say”命令的输出进行交互吗?

第一个Python程序

自动化部署