

Stdout get updated every 0.5 seconds for every two lines to contain: 0Īnd each log file contains the respective log for a given process. T2 = threading.Thread(target=output_reader, args=(proc2, file2)) T1 = threading.Thread(target=output_reader, args=(proc1, file1)) Subprocess.Popen(, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc2, \ With subprocess.Popen(, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc1, \ The threading module allows us to do that.įirst, have a look at how to do the output redirection part alone in this question: Python Popen: Write to stdout AND log file simultaneously commandrunners purpose is to run external commands from python, just like subprocess on which it relies, while solving various problems a developer may face.

For example, I wanted to launch two processes that talk over a port between them, and save their stdout to a log file and stdout. However, there are cases where you need this. However, these processes, known as subprocesses, run as completely independent entities-each with their own private system. Instead of running a different process on the cluster, I preferred to run it as a coroutine along with the HTTP server. Both capture output and run on background with threadingĪs mentioned on this answer, if you capture the output with stdout= and then try to read(), then the process blocks.
