【发布时间】:2019-03-15 12:03:23
【问题描述】:
我正在尝试创建一个与我的主应用程序并行运行的工作子进程。为此,我使用 subprocess.Popen 和内置的 PIPE。
p = subprocess.Popen( cmd , stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=1, universal_newlines=True)
time.sleep(.5)
data = p.stdout.readline()
for i in range(10): # repeat several times to show that it works
p.stdin.write("test")
line = p.stdout.readline()
print(line) # read output
我能够将 stdout PIPE 上的数据接收到变量 data 中,但循环中的读取语句总是返回一个空字符串。
我的子流程极其简单:
print("Its working", flush=True)
while(True):
r=input()
print("Its working", flush=True)
看来我的子进程无法读取通过标准输入发送的任何数据。如果我删除了 r=input() 命令,并且只不断地打印一个字符串,它可以工作并且我多次收到该行,但是当我尝试通过 input() 检查传入的字符串时,它永远不会得到它。
我是否试图错误地获取传入 PIPE 上的数据,如果是,我该怎么做? 我尝试了其他选项,例如:
r = sys.stdin.buffer.read()
r = sys.stdin.buffer.readline()
r = sys.stdin.read()
r = sys.stdin.readline()
但它们都不起作用。
【问题讨论】:
-
您必须发送一个换行符 (
\n) 才能继续输入。改成p.stdin.write("test\n"),可能效果会更好。
标签: python subprocess pipe stdin