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')
Share:
12,957
PepperoniPizza
Author by

PepperoniPizza

Computer Scientist, gamer, developer and python lover. Currently Software Engineer at Yougov.com

Updated on June 09, 2022

Comments

  • PepperoniPizza
    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
    PepperoniPizza almost 10 years
    I 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
    larsks almost 10 years
    Do you see the line where it says, stdout, stderr = p.communicate(...)? stdout contains the output from the script.
  • larsks
    larsks almost 10 years
    The subprocess documentation has more details about how everything works.
  • PepperoniPizza
    PepperoniPizza almost 10 years
    could you please explain me why the password\nauth ?
  • larsks
    larsks almost 10 years
    \n is a newline character. Each \n is simulating you hitting the return key.
  • larsks
    larsks almost 10 years
    The 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.