xiaohan2012
xiaohan2012

Reputation: 10342

Python execute command line,sending input and reading output

How to achieve the following functionality:

  1. Python executes a shell command, which waits for the user to input something
  2. after the user typed the input, the program responses with some output
  3. Python captures the output

Upvotes: 11

Views: 16382

Answers (2)

SeleM
SeleM

Reputation: 9658

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.run executes a command and waits for it to finish, while with subprocess.Popen you can continue doing your stuff while the process finishes and then just repeatedly call subprocess.communicate yourself to pass and receive data to your process.

Upvotes: 1

mgilson
mgilson

Reputation: 310089

You 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)

Upvotes: 12

Related Questions