sirve que para examples example ejemplos python subprocess

que - subprocess.popen python example



subprocess.check_output código de retorno (3)

¿hay una manera de obtener un código de retorno sin un intento / excepto?

check_output genera una excepción si recibe un estado de salida distinto de cero porque con frecuencia significa que un comando falló. grep puede devolver un estado de salida distinto de cero incluso si no hay ningún error; en este caso, podría usar .communicate() :

from subprocess import Popen, PIPE pattern, filename = ''test'', ''tmp'' p = Popen([''grep'', pattern, filename], stdin=PIPE, stdout=PIPE, stderr=PIPE, bufsize=-1) output, error = p.communicate() if p.returncode == 0: print(''%r is found in %s: %r'' % (pattern, filename, output)) elif p.returncode == 1: print(''%r is NOT found in %s: %r'' % (pattern, filename, output)) else: assert p.returncode > 1 print(''error occurred: %r'' % (error,))

No necesita llamar a un comando externo para filtrar líneas, puede hacerlo en Python puro:

with open(''tmp'') as file: for line in file: if ''test'' in line: print line,

Si no necesitas la salida; puedes usar subprocess.call() :

import os from subprocess import call try: from subprocess import DEVNULL # Python 3 except ImportError: # Python 2 DEVNULL = open(os.devnull, ''r+b'', 0) returncode = call([''grep'', ''test'', ''tmp''], stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL)

Estoy usando:

grepOut = subprocess.check_output("grep " + search + " tmp", shell=True)

Para ejecutar un comando de terminal, sé que puedo usar try / except para detectar el error, pero ¿cómo puedo obtener el valor del código de error?

Encontré esto en la documentación oficial:

exception subprocess.CalledProcessError Exception raised when a process run by check_call() or check_output() returns a non-zero exit status. returncode Exit status of the child process.

Pero no hay ejemplos dados y Google no fue de ayuda.


Puede obtener el código de error y los resultados de la excepción que se genera.

Esto se puede hacer a través de los campos returncode y output .

Por ejemplo:

import subprocess try: grepOut = subprocess.check_output("grep " + "test" + " tmp", shell=True) except subprocess.CalledProcessError as grepexc: print "error code", grepexc.returncode, grepexc.output


Python 3.5 introdujo el método subprocess.run() . La firma se ve como:

subprocess.run( args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False )

El resultado devuelto es un subprocess.CompletedProcess . En 3.5, puede acceder a los returncode , returncode , stdout y stderr desde el proceso ejecutado.

Ejemplo:

>>> result = subprocess.run([''ls'', ''/tmp''], stdout=subprocess.DEVNULL) >>> result.returncode 0 >>> result = subprocess.run([''ls'', ''/nonexistent''], stderr=subprocess.DEVNULL) >>> result.returncode 2