Python Subprocess.Popen from a thread Python Subprocess.Popen from a thread python python

Python Subprocess.Popen from a thread


You didn't supply any code for us to look at, but here's a sample that does something similar to what you describe:

import threadingimport subprocessclass MyClass(threading.Thread):    def __init__(self):        self.stdout = None        self.stderr = None        threading.Thread.__init__(self)    def run(self):        p = subprocess.Popen('rsync -av /etc/passwd /tmp'.split(),                             shell=False,                             stdout=subprocess.PIPE,                             stderr=subprocess.PIPE)        self.stdout, self.stderr = p.communicate()myclass = MyClass()myclass.start()myclass.join()print myclass.stdout


Here's a great implementation not using threads:constantly-print-subprocess-output-while-process-is-running

import subprocessdef execute(command):    process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)    output = ''    # Poll process for new output until finished    for line in iter(process.stdout.readline, ""):        print line,        output += line    process.wait()    exitCode = process.returncode    if (exitCode == 0):        return output    else:        raise Exception(command, exitCode, output)execute(['ping', 'localhost'])