使用 Popen.stdin 执行多个命令

2024-03-19

我想使用管道在从 python 脚本启动的独立应用程序中执行多个命令。我可以可靠地将命令传递到程序的标准输入的唯一方法是使用 Popen.communicate,但它会在命令执行后关闭程序。如果我使用 Popen.stdin.write ,则该命令仅执行 5 次左右中的 1 次,它的工作不可靠。我究竟做错了什么?

详细说明一下:

我有一个应用程序,它侦听标准输入命令并逐行执行它们。 我希望能够运行该应用程序并根据用户与 GUI 的交互向其传递各种命令。 这是一个简单的测试示例:

import os, string
from subprocess import Popen, PIPE

command = "anApplication" 
process = Popen(command, shell=False, stderr=None, stdin=PIPE)

process.stdin.write("doSomething1\n")
process.stdin.flush()
process.stdin.write("doSomething2\n")
process.stdin.flush()

我希望看到这两个命令的结果,但没有得到任何响应。 (如果我多次执行 Popen.write 行之一,它偶尔会起作用。)

如果我执行:

process.communicate("doSomething1")

它工作完美,但应用程序终止。


如果我正确理解您的问题,您希望与控制台应用程序进行交互(即发送命令并读取响应)。

如果是这样,您可能需要检查类似 Expect 的库,例如 Python 的 pexpect:http://pexpect.sourceforge.net http://pexpect.sourceforge.net

它会让你的生活更轻松,因为它会处理同步问题,ddaa 也描述了这个问题。也可以看看:http://www.noah.org/wiki/Pexpect#Q:_Why_not_just_use_a_pipe_.28popen.28.29.29.3F http://www.noah.org/wiki/Pexpect#Q:_Why_not_just_use_a_pipe_.28popen.28.29.29.3F

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Popen.stdin 执行多个命令 的相关文章

随机推荐