examples example español python subprocess silent

example - subprocess python español



¿Hay una versión tranquila de subprocess.call? (5)

A menudo, ese tipo de charla está en stderr, por lo que es posible que desee silenciar eso también. Aquí está mi ejemplo:

from subprocess import call, DEVNULL return_code = call(args, stderr=DEVNULL, stdout=DEVNULL)

Nota: subprocess.DEVNULL está disponible desde Python 3.3. Si todavía estás en Python 2:

import os with open(os.devnull, ''w'') as shutup: return_code = call(args, stdout=shutup, stderr=shutup)

¿Existe una variante de subprocess.call que puede ejecutar el comando sin imprimir en la salida estándar, o una manera de bloquear sus mensajes de salida estándar?


Esta es una receta que uso mucho: llamar al subprocess y recolectar la salida, y cuando el comando se ejecuta correctamente, descarte la salida, pero cuando falla, imprima la salida.

import subprocess as sp import sys if "print" in __builtins__.__dict__: prn = __builtins__.__dict__["print"] else: def prn(*args, **kwargs): """ prn(value, ..., sep='' '', end=''//n'', file=sys.stdout) Works just like the print function in Python 3.x but can be used in 2.x. Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. """ sep = kwargs.get("sep", '' '') end = kwargs.get("end", ''/n'') file = kwargs.get("file", sys.stdout) s = sep.join(str(x) for x in args) + end file.write(s) def rc_run_cmd_basic(lst_cmd, verbose=False, silent=False): if silent and verbose: raise ValueError("cannot specify both verbose and silent as true") p = sp.Popen(lst_cmd, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) tup_output = p.communicate() s_cmd = '' ''.join(lst_cmd) if verbose: prn() prn("command: ''%s''/n" % s_cmd) if 0 != p.returncode: prn() prn("Command failed with code %d:" % p.returncode) else: prn("Command succeeded! code %d" % p.returncode) if verbose: prn("Output for: " + s_cmd) prn(tup_output[0]) prn() if not silent and 0 != p.returncode: prn("Error output for: " + s_cmd) prn(tup_output[1]) prn() return p.returncode


Sí. Redirige su stdout a /dev/null .

process = subprocess.call(["my", "command"], stdout=open(os.devnull, ''wb''))


Utilizo subprocess.check_output en tales casos y descarto el valor de retorno. Es posible que desee agregar un comentario a su código que indique por qué está usando check_output en lugar de check_call. check_output también es mejor cuando se produce un error y está interesado en la salida de error. Código de ejemplo a continuación. La salida solo se ve cuando se elimina el comentario de la línea de impresión. Si el comando falla, se lanza una excepción.

import subprocess ret = subprocess.check_output(["cat", "/tmp/1"]) #print ret


subprocess.call también acepta redirecciones stdin / stdout / stderr:

process = subprocess.call(["my", "command"], stdout=open(os.devnull, ''wb''))