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 using Python's subprocess module.
I tried doing this:
data=subprocess.Popen(['./a.out','< 0.in'],stdout=subprocess.PIPE,stdin=subprocess.PIPE).communicate()
Nothing was printed (data[0] was blank) when I ran this. What is the right method to do what I want to do?
Redirection using
<
is a shell feature, not a python feature.There are two choices:
Use
shell=True
and let the shell handle redirection:Let python handle redirection:
The second option is usually preferred because it avoids the vagaries of the shell.
If you want to capture stderr in
data
, then addstderr=subprocess.PIPE
to thePopen
command. Otherwise, stderr will appear on the terminal or wherever python's error messages are being sent.