Passing Input To An Executable Using Python Subprocess Module
I have an input file called 0.in. To get the output I do ./a.out < 0.in in the Bash Shell. Now, I have several such files (more than 500) and I want to automate this process usi
Solution 1:
Redirection using <
is a shell feature, not a python feature.
There are two choices:
Use
shell=True
and let the shell handle redirection:data = subprocess.Popen(['./a.out < 0.in'], stdout=subprocess.PIPE, shell=True).communicate()
Let python handle redirection:
withopen('0.in') as f: data = subprocess.Popen(['./a.out'], stdout=subprocess.PIPE, stdin=f).communicate()
The second option is usually preferred because it avoids the vagaries of the shell.
If you want to capture stderr in data
, then add stderr=subprocess.PIPE
to the Popen
command. Otherwise, stderr will appear on the terminal or wherever python's error messages are being sent.
Post a Comment for "Passing Input To An Executable Using Python Subprocess Module"