Python subprocess.communicate()是否向进程发送垃圾?

Python subprocess.communicate()是否向进程发送垃圾?,python,subprocess,Python,Subprocess,我在具有subprocess.communicate()的子进程中读取/写入stdin/stdout时遇到问题 这是子进程(在C中) 我希望这会被打印出来 test input was test: 但是,proc.communicate()似乎会导致gets()的EOF,从而导致子应用程序终止。我是否可以在不发送EOF的情况下与子应用程序通信?IE我想先读应用程序,然后再写应用程序。来自以下文档: 将数据发送到stdin。从stdout和stderr读取数据,直到到达文件末尾。等待进程终止 这

我在具有subprocess.communicate()的子进程中读取/写入stdin/stdout时遇到问题

这是子进程(在C中)

我希望这会被打印出来

test
input was test:

但是,proc.communicate()似乎会导致gets()的EOF,从而导致子应用程序终止。我是否可以在不发送EOF的情况下与子应用程序通信?IE我想先读应用程序,然后再写应用程序。

来自以下文档:

将数据发送到stdin。从stdout和stderr读取数据,直到到达文件末尾。等待进程终止

这意味着子流程只能调用一次
communicate()

获取实时输出可能有点棘手,但在您的示例中,这应该不会太困难,因为您只尝试读取一行。以下方面应起作用:

import subprocess

proc = subprocess.Popen('./test', stdin=subprocess.PIPE, stdout=subprocess.PIPE)

outdata = proc.stdout.readline()
print outdata
outdata, errdata = proc.communicate('output was ' + outdata)
print outdata

请注意,我重命名了一些变量,因为子流程的输出并不是Python流程的标准格式。

来自以下文档:

将数据发送到stdin。从stdout和stderr读取数据,直到到达文件末尾。等待进程终止

这意味着子流程只能调用一次
communicate()

获取实时输出可能有点棘手,但在您的示例中,这应该不会太困难,因为您只尝试读取一行。以下方面应起作用:

import subprocess

proc = subprocess.Popen('./test', stdin=subprocess.PIPE, stdout=subprocess.PIPE)

outdata = proc.stdout.readline()
print outdata
outdata, errdata = proc.communicate('output was ' + outdata)
print outdata

请注意,我重命名了您的一些变量,因为您的子进程的输出实际上不是Python进程的标准输入。您可能还决定根本不使用communicate()。例如,请参阅是否可以等待我们传递的用于通信的命令?示例:我将cmd1、cmd2、cmd3作为传递给通信的命令。每次执行命令后,我可以等待5秒吗?+1。您可能还决定根本不使用communicate()。例如,请参阅是否可以等待我们传递的用于通信的命令?示例:我将cmd1、cmd2、cmd3作为传递给通信的命令。我可以在每次命令执行后等待5秒吗?我接受了下面的答案,因为找到问题的解决方案非常重要。我还想补充一点,我需要一个
fflush(stdout)因为输入被缓冲,这导致了问题。我接受了下面的答案,因为这对于找到问题的解决方案非常重要。我还想补充一点,我需要一个
fflush(stdout)因为输入被缓冲,这导致了问题。
import subprocess

proc = subprocess.Popen('./test', stdin=subprocess.PIPE, stdout=subprocess.PIPE)

outdata = proc.stdout.readline()
print outdata
outdata, errdata = proc.communicate('output was ' + outdata)
print outdata