programa otro ejemplos ejecutar desde como python subprocess

otro - ejecutar programa desde python



Cómo llamar a un comando y no obtener su resultado (4)

Esta pregunta ya tiene una respuesta aquí:

En Python, ¿cuál es la forma más corta y estándar de llamar un comando a través de un subprocess pero sin molestarse con su resultado?

Intenté subprocess.call pero parece devolver la salida. No me molesta eso, solo necesito ejecutar el programa silenciosamente sin que la salida ocupe toda la pantalla.

Si ayuda, llamo a pdflatex y mi intención es solo llamarlo.


En caso de que su proceso produzca cantidades significativas de salida que no desea almacenar en la memoria intermedia, debe redirigir la salida a la papelera electrónica:

with open(os.devnull, "w") as f: subprocess.call(["pdflatex", filename], stdout=f)

La variable os.devnull es el nombre del dispositivo nulo de su sistema operativo ( /dev/null en la mayoría de los sistemas operativos, nul en el otro).


Use / dev / null si está usando Unix. Si ejecuta cualquier comando en Shell y no desea mostrar su salida en la terminal.

Por ejemplo: - ls> / dev / null no producirá ninguna salida en el terminal.

Así que simplemente use os, subprocess para ejecutar algo en shell y simplemente ponga su o / p en / dev / null.


solo llámalo como eres y vira> / dev / null al final de la mancomunidad. Eso redirigirá cualquier resultado textual.


p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate() # do something with out, err, or don''t bother altogether.

Básicamente, esto "canaliza" cualquier salida de cmd a stdout y stderr a búferes en memoria preparados por subprocess . Lo que hagas con el contenido de esos buffers depende de ti. Puede examinarlos, o no molestarse con ellos por completo. Pero el efecto secundario de las tuberías en estos buffers es que no se imprimirán en la terminal.

editar : Esto también funciona con el método de conveniencia, call . Para una demostración:

>>> subprocess.call(''ping 127.0.0.1'') Pinging 127.0.0.1 with 32 bytes of data: Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Ping statistics for 127.0.0.1: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms 0 >>> subprocess.call(''ping 127.0.0.1'', stdout=subprocess.PIPE) 0

edit-2 : Una nota de precaución para subprocess.call :

Nota: No use stdout = PIPE o stderr = PIPE con esta función. Como las tuberías no se están leyendo en el proceso actual, el proceso secundario puede bloquearse si genera suficiente salida a una tubería para llenar el buffer de tubería del sistema operativo.