Search code examples
pythonshelliosubprocessinteractive-shell

Python subprocess: interacting with a shell script


I have a shell script which asks the user for too many questions.

I want to answer every question that ends with : with a enter, and every question that ends with a ? with yenter.

e.g.,

Enter your name:
enter

Enter your email:
enter

...

Are you sure these details are correct?
yenter

I have started the subprocess with:

subprocess.Popen(shell=True, stdout=sp.PIPE, stderr=sp.STDOUT, stdin=sp.PIPE)

How do I poll over the script's output, waiting for the question to appear?


Solution

  • Try something like this (I have not tested it):

    import pexpect
    
    child = pexpect.spawn('yourprogram')
    while True:
      found = child.expect ([r':$', r'\?$', pexpect.EOF])
      if found == 0:
        child.send('\n')
      elif found == 1:
        child.send('y\n')
      else:  # EOF
         return