Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Subprocess.Popen from a thread

I'm trying to launch an 'rsync' using subprocess module and Popen inside of a thread. After I call the rsync I need to read the output as well. I'm using the communicate method to read the output. The code runs fine when I do not use a thread. It appears that when I use a thread it hangs on the communicate call. Another thing I've noticed is that when I set shell=False I get nothing back from the communicate when running in a thread.

like image 768
noahd Avatar asked Jun 12 '09 04:06

noahd


1 Answers

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 threading import subprocess  class 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 
like image 68
Ryan Bright Avatar answered Oct 11 '22 11:10

Ryan Bright