How to achieve the following functionality:
- Python executes a shell command, which waits for the user to
inputsomething - after the user typed the
input, the program responses with someoutput - Python captures the
output
How to achieve the following functionality:
input somethinginput, the program responses with some outputoutputYou probably want subprocess.Popen. To communicate with the process, you'd use the communicate method.
e.g.
process=subprocess.Popen(['command','--option','foo'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
inputdata="This is the string I will send to the process"
stdoutdata,stderrdata=process.communicate(input=inputdata)
For sync behaviors, you can use subprocess.run() function starting from Python v3.5.
As mentioned in What is the difference between subprocess.popen and subprocess.run 's accepted answer:
The main difference is that
subprocess.runexecutes a command and waits for it to finish, while withsubprocess.Popenyou can continue doing your stuff while the process finishes and then just repeatedly callsubprocess.communicateyourself to pass and receive data to your process.