成功python管道stdin,只出一次这个源
main.py
import subprocess from subprocess import PIPE, STDOUT
player_pipe = subprocess.Popen(["source\call.py", 'arg1'], stdin=PIPE,
stdout=PIPE, stderr=STDOUT, shell=True)
player_pipe.stdin.write("Send Msg\n")
get_stdout = player_pipe.stdout.readline()
print("[Get Msg]" + get_stdout)
player_pipe.kill()
player_pipe.wait()
call.py
import sys
getMsg = raw_input()
print getMsg
但我想要两次或更多时间stdin,out
所以更新来源,但它不起作用
这个来源有什么不对
main.py(更新 - 不工作)
import subprocess from subprocess import PIPE, STDOUT
player_pipe = subprocess.Popen(["source\call.py", 'arg1'], stdin=PIPE,
stdout=PIPE, stderr=STDOUT, shell=True)
player_pipe.stdin.write("Send Msg\n")
get_stdout = player_pipe.stdout.readline()
print("[Get Msg]" + get_stdout)
player_pipe.stdin.write("Send Msg2\n")
get_stdout = player_pipe.stdout.readline()
print("[Get Msg]" + get_stdout)
player_pipe.kill()
player_pipe.wait()
call.py(更新 - 不工作)
import sys
getMsg = raw_input()
print getMsg
getMsg2 = raw_input()
print getMsg2
:d
答案 0 :(得分:1)
call.py
的输出被缓冲。所以你必须flush()
发送给main.py
。
#!/usr/bin/python2
import sys
getMsg = raw_input()
print getMsg
sys.stdout.flush()
getMsg2 = raw_input()
print getMsg2
sys.stdout.flush()
请注意,至少当你的操作系统是Linux时你需要shebang #!/usr/bin/python2
(我不知道为什么OP的代码在没有shebang的情况下工作。也许是一些Windows魔术?)。
此外,您可以使用-u
选项不缓冲python的输出。
player_pipe = subprocess.Popen(["/usr/bin/python2","-u","./call.py"], stdin=PIPE,
stdout=PIPE, stderr=STDOUT, shell=False)
答案 1 :(得分:0)
当你说“但我想要两次或更多时间stdin,out”时,我不确定你的意思是什么。
在基本的Linux / UNIX系统中,您只有1个 - 只有一个 - STDIN,STDOUT和STDERR。现在,你可以输入和输出东西,如果你愿意,可以单独处理STDERR,但你不能随意分配多个输入而不需要设置单独的机制(套接字等)来处理你的程序。