Salida de piping Python entre dos subprocesos.

Estoy trabajando en algún código que hará DD un dispositivo de locking a través de SSH, y quiero hacer esto con un subproceso para poder monitorear el estado de DD durante la transferencia (eliminando el proceso dd con SIGUSR1 para obtener su estado actual , y leyendo que selecciona selecciona).

El comando que estoy tratando de implementar sería algo como esto:

dd if=/dev/sda | ssh root@example.com 'dd of=/dev/sda' 

El método actual que probé fue:

 dd_process = subprocess.Popen(['dd','if=/dev/sda'],0,None,None,subprocess.PIPE, subprocess.PIPE) ssh_process = subprocess.Popen(['ssh','root@example.com','dd of=/dev/sda'],0,None,dd_process.stdout) 

Sin embargo, cuando ejecuto esto, el proceso SSH se desactiva después de 10-40 segundos.
¿Estoy siendo completamente obtuso aquí, o no hay manera de canalizar entre subprocesos como este?

Editar: Resulta que mi código real no tenía el nombre de host. Esta es la forma correcta de hacer las cosas.

 from subprocess import Popen, PIPE dd_process = Popen(['dd', 'if=/dev/sda'], stdout=PIPE) ssh_process = Popen(['ssh', 'root@example.com', 'dd','of=/dev/sda'],stdin=dd_process.stdout, stdout=PIPE) dd_process.stdout.close() # enable write error in dd if ssh dies out, err = ssh_process.communicate() 

Esta es la forma de PIPE la salida del primer proceso a la segunda. (aviso stdin en el ssh_process)

La biblioteca sh de Python facilita llamar a los comandos del sistema operativo y canalizarlos.

De la documentación:

 for line in tr(tail("-f", "test.log", _piped=True), "[:upper:]", "[:lower:]", _iter=True): print(line)