Estoy tratando de iniciar una 'rsync' utilizando el módulo de subproceso y Popen dentro de un hilo. Después de llamar a rsync también necesito leer la salida. Estoy usando el método de comunicación para leer la salida. El código funciona bien cuando no uso un hilo. Parece que cuando uso un hilo cuelga en la llamada de comunicación. Otra cosa que noté es que cuando configuro shell = False, no recibo nada de la comunicación cuando se ejecuta en un hilo.Python Subprocess.Popen a partir de un hilo
21
A
Respuesta
33
no aparece ninguno ningún código para que veamos, pero esto es una muestra que hace algo similar a lo que usted 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
9
Aquí es una gran aplicación que no utilizan hilos: constantly-print-subprocess-output-while-process-is-running
import subprocess
def 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'])
+4
Cabe señalar que esta implementación se bloqueará en 'process.stdout.readline()'. – Ian
Cuestiones relacionadas
- 1. Matar a un proceso creado con subprocess.Popen de Python()
- 2. Python: ulimit y agradable para subprocess.call/subprocess.Popen?
- 3. Cómo pasar objeto a partir de hilo conductor a otro hilo en Java
- 4. ¿Por qué python subprocess.Popen ejecuta un subproceso a través de cmd.exe?
- 5. salida de la consola Desactivar en subprocess.Popen en Python
- 6. ¿Cómo puedo obtener información 'en tiempo real' de volver de un subprocess.Popen en Python (2.5)
- 7. python subprocess.Popen ocultar real "nombre de la pantalla"
- 8. ¿Código Python generado automáticamente a partir de un diagrama UML?
- 9. variable global a partir de un archivo diferente Python
- 10. Ejecutando un script de python usando subprocess.Popen() en una vista django
- 11. Engendrando un hilo en python
- 12. Modificación de un diccionario de Python a partir de diferentes subprocesos
- 13. Enhebrado de Python. ¿Cómo bloqueo un hilo?
- 14. Generando topes de soaplib de Python a partir de WSDL
- 15. Cómo puedo matar un hilo en python
- 16. Diferencia entre subprocess.Popen y os.system
- 17. python no creará hilo?
- 18. Cómo determinar subprocess.Popen() falló cuando shell = True
- 19. pasando parámetros a un hilo
- 20. Creación de un servicio web simulado a partir de un archivo WSDL en Python
- 21. ¿Cómo creo un histograma a partir de un hashmap en python?
- 22. Obtener el nombre del módulo a partir de la información del hilo
- 23. de importación dentro de un hilo de Python
- 24. Python 2.7: Imprimir hilo seguro
- 25. Enviar Ctrl-C a procesos remotos iniciados a través de subprocess.Popen y ssh
- 26. Llamando al código de Python desde un hilo en C
- 27. biblioteca de Python para crear un archivo de video a partir de imágenes
- 28. En Cocoa Touch/UIKit, ¿cómo detectar cambios en la interfaz de usuario a partir de un hilo de fondo?
- 29. Java - Lectura de un lector tamponada (a partir de una toma de corriente) está en pausa el hilo
- 30. Cómo crear una instancia nueva a partir de un objeto de clase en Python
Sí, eso es más o menos exactamente lo que estoy haciendo. Sin embargo, me gustaría que me leyeran el resultado dentro del hilo. También debería notar que estoy usando Python 2.3. Agarré una copia del subproceso de 2.4. – noahd
marque esto como "respondido" –
Debería ser más claro que eso es lo que estoy haciendo, pero no funciona. En este caso, la llamada de comunicación no devolverá nada y el comando no parece ejecutarse. Si configuro shell = True, la comunicación cuelga el hilo. Luego, después de detener el pitón, termino con un proceso ssh difunto. – noahd