我正在尝试创建一个与主应用程序并行运行的工作程序子进程。为此,我使用了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 中,但是循环中的read语句始终返回一个空字符串。
我的子过程非常简单:
print("Its working", flush=True)
while(True):
r=input()
print("Its working", flush=True)
似乎我的子进程无法读取通过stdin发送的任何数据。如果我删除了r = input()命令,并且仅不断打印一个字符串,它可以工作并且我多次接收到该行,但是当我尝试通过input()检查传入的字符串时,它永远都不会得到它。 / p>
我是否尝试错误地获取传入PIPE上的数据,如果是,该怎么办? 我尝试了其他选项,例如:
r = sys.stdin.buffer.read()
r = sys.stdin.buffer.readline()
r = sys.stdin.read()
r = sys.stdin.readline()
但是它们都不起作用。
答案 0 :(得分:0)
我在主程序方面缺少\ n。感谢JohanL指出这一点。现在一切正常。