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

时间:2009-06-20 05:01:11

标签: python command-line subprocess

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

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

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:4)

看到问题 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()

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