Use subprocess.call()
. A partir de los documentos:
subprocess.call (* popenargs, ** kwargs)
comando Ejecutar con argumentos. Espere a que se complete el comando, luego devuelva el atributo de código de retorno. Los argumentos son los mismos que para el constructor Popen .
Editar:
subprocess.call()
utiliza wait()
, y wait()
es vulnerable a bloqueos (como Tommy Herbert señaló). A partir de los documentos:
Advertencia: Este será un punto muerto si el proceso niño genera una salida suficiente a una tubería de salida estándar o stderr tal que lo bloquea en espera de la tubería OS buffer para aceptar más datos. Use communica() para evitar eso.
Así que si su comando genera una gran cantidad de salida, utilice communicate()
lugar:
p = subprocess.Popen(
["scanx", "--udp", host],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out, err = p.communicate()
A diferencia de poll(), hay un peligro de estancamiento aquí. –
@Tommy, buen punto. Ampliado en esto en mi respuesta. Gracias. –
Muchas gracias muchachos :) –