Piping output of subprocess.Popen to files
python, stdout, subprocess
Solution
Per the docs,
stdin, stdout and stderr specify the executed programs’ standard input, standard output and standard error file handles, respectively. Valid values are PIPE, an existing file descriptor (a positive integer), an existing file object, and None.
So just pass the open-for-writing file objects as named arguments `stdout=` and `stderr=` and you should be fine!
Problem
I need to launch a number of long-running processes with `subprocess.Popen`, and would like to have the `stdout` and `stderr` from each automatically piped to separate log files. Each process will run simultaneously for several minutes, and I want two log files (`stdout` and `stderr`) per process to be written to as the processes run. Do I need to continually call `p.communicate()` on each process in a loop in order to update each log file, or is there some way to invoke the original `Popen` command so that `stdout` and `stderr` are automatically streamed to open file handles?