4

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?

1 Answer 1

5

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
Sign up to request clarification or add additional context in comments.

2 Comments

+1 for pexpect which I didn't know. It seems like a very useful approach - I will try to make it work.
pexpect.run('yourprogram', events={r':$': '\n', r'\?$': 'y\n'})

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.