success python pipe stdin, out only one time this source
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
but I want twice or more time stdin, out
so update source but it's not work
What's wrong this source
main.py (update-not work)
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(update-not work)
import sys
getMsg = raw_input()
print getMsg
getMsg2 = raw_input()
print getMsg2
:D
the output of call.py
is buffered. so you have to flush()
it to send to main.py
.
#!/usr/bin/python2
import sys
getMsg = raw_input()
print getMsg
sys.stdout.flush()
getMsg2 = raw_input()
print getMsg2
sys.stdout.flush()
Note that you need shebang #!/usr/bin/python2
at least when your OS is Linux (I don't know why OP's code works without shebang. Maybe some Windows magic ?).
Also you can use -u
option not to buffer the output of python.
player_pipe = subprocess.Popen(["/usr/bin/python2","-u","./call.py"], stdin=PIPE,
stdout=PIPE, stderr=STDOUT, shell=False)