Python os.system() input text to script
12,957
You can use subprocess.Popen
to start the script and the communicate
method to pass it input. Something like this:
import subprocess
p = subprocess.Popen(['./script.sh', '-p', '1234'],
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
stdout, stderr = p.communicate(input='password\nauth username\nauth password\n')
Author by
PepperoniPizza
Computer Scientist, gamer, developer and python lover. Currently Software Engineer at Yougov.com
Updated on June 09, 2022Comments
-
PepperoniPizza almost 2 years
I have a script that I need to automate, so it's a
.sh
script which I want to run inside a python script: something like this:import os os.system('./script.sh -p 1234')
The script
script.sh
needs the user to input 3 fields, 1) the sudo password, 2) a string and 3) a string.Enter password for user: xxxx #typed by me Enter Auth Username: xxxx #typed by me Enter Auth Password: xxx #typed by me
How can I make the python script to type/insert/pass those 3 needed values to
script.sh
. -
PepperoniPizza almost 10 yearsI tried this, it seems to work, but I cannot tell because I can't see the script output, If I run the process with os.system() I can see the output on the python shell, nayway to get this ?
-
larsks almost 10 yearsDo you see the line where it says,
stdout, stderr = p.communicate(...)
?stdout
contains the output from the script. -
larsks almost 10 yearsThe
subprocess
documentation has more details about how everything works. -
PepperoniPizza almost 10 yearscould you please explain me why the
password\nauth
? -
larsks almost 10 years
\n
is a newline character. Each\n
is simulating you hitting the return key. -
larsks almost 10 yearsThe first response is "password", the second response is "auth username", the third response is "auth password". The
\n
is simply where you would hit "return" if you were typing this manually.