subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"])
RIght now I have a script that I run. When I run it and it hits this line, it starts printing stuff because run.sh has prints in it.
How do I pipe this to a text file also? (And also print, if possible)
If you want to write the output to a file you can use the stdout-argument of
subprocess.PIPE, a file object or a file descriptor. The first is the default, stdout is inherited from the parent (your script). The second allows you to pipe from one command/process to another. The third and fourth are what you want, to have the output written to a file.
You need to open a file with something like
open and pass the object or file descriptor integer to
f = open("blah.txt", "w") subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
I'm guessing any valid file-like object would work, like a socket (gasp :)), but I've never tried.
As marcog mentions in the comments you might want to redirect stderr as well, you can redirect this to the same location as stdout with
stderr=subprocess.STDOUT. Any of the above mentioned values works as well, you can redirect to different places.
The options for
popen can be used in
args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)
Then you can do what you want with
myoutput (which would need to be a file btw).
Also, you can do something closer to a piped output like this.
dmesg | grep hda
p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) output = p2.communicate()
There's plenty of lovely, useful info on the python manual page.