Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python subprocess: check to see if the executed script is asking for user input

import subprocess

child = subprocess.Popen(['python', 'simple.py'], stdin=subprocess.PIPE)
child.communicate('Alice')

I know you can communicate with executed script via communicate How do you check for whether a script 'simple.py' is asking for user input?

simple.py could ask for 5-10 user inputs so simply hardcoding communicate wouldnt be enough.

[EDIT]: want to parse the stdout as the script is running and communicate back to the script

while True:
    if child.get_stdout() == '?':
       # send user input
like image 898
ealeon Avatar asked Mar 02 '16 15:03

ealeon


1 Answers

A simple example:

simple.py:

i = raw_input("what is your name\n")
print(i)
j = raw_input("What is your age\n")
print(j)

Read and write:

import subprocess

child = subprocess.Popen(['python2', 'simple.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

for line in iter(child.stdout.readline, ""):
    print(line)
    if "name" in line:
        child.stdin.write("foo\n")
    elif "age" in line:
        child.stdin.write("100\n")

Output:

what is your name

foo

What is your age

100
like image 155
Padraic Cunningham Avatar answered Oct 03 '22 08:10

Padraic Cunningham