otro - ejecutar programa desde python
Cómo llamar a un comando y no obtener su resultado (4)
Esta pregunta ya tiene una respuesta aquí:
- Cómo ocultar la salida del subproceso en Python 2.7 6 respuestas
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.