使用Popen.stdin执行多个命令

sz.*_*sz. 19 python popen

我想在使用管道从python脚本启动的独立应用程序中执行多个命令.我能够可靠地将命令传递给程序的stdin的唯一方法是使用Popen.communicate,但它会在命令执行后关闭程序.如果我使用Popen.stdin.write而不是命令只执行5次左右,那么它就不可靠.我究竟做错了什么?

详细说明:

我有一个应用程序,它监听stdin的命令并逐行执行它们.我希望能够运行应用程序并根据用户与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()
Run Code Online (Sandbox Code Playgroud)

我希望看到两个命令的结果,但我没有得到任何回应.(如果我多次执行其中一条Popen.write行,它偶尔会有效.)

如果我执行:

process.communicate("doSomething1")
Run Code Online (Sandbox Code Playgroud)

它完美地工作但应用程序终止.

Omn*_*ous -1

听起来您的应用程序正在以一种奇怪的方式处理来自管道的输入。这意味着在您关闭管道之前它不会获取您发送的所有命令。

所以我建议的方法就是这样做:

process.stdin.write("command1\n")
process.stdin.write("command2\n")
process.stdin.write("command3\n")
process.stdin.close()
Run Code Online (Sandbox Code Playgroud)

听起来你的 Python 程序并没有从应用程序读取输出,所以如果你像这样一次性发送所有命令也没关系。