example español python python-3.x subprocess

español - subproceso python check_output devuelto estado de salida distinto de cero 1



subprocess python 3 example (2)

estos son mis códigos python:

import subprocess subprocess.check_output("ls",shell=True,stderr=subprocess.STDOUT) import subprocess subprocess.check_output("yum",shell=True,stderr=subprocess.STDOUT)

el primero funciona bien, pero el segundo regreso:

Traceback (most recent call last): File "/usr/lib/x86_64-linux-gnu/gedit/plugins/pythonconsole/console.py", line 378, in __run r = eval(command, self.namespace, self.namespace) File "<string>", line 1, in <module> File "/usr/lib/python3.4/subprocess.py", line 616, in check_output raise CalledProcessError(retcode, process.args, output=output) subprocess.CalledProcessError: Command ''yum'' returned non-zero exit status 1

¿por qué sucede esto? ¿Es eso porque ls es el comando original de shell pero yum es el nuevo paquete? ¿Cómo resolver este problema?


El comando yum que ejecuta se ejecutó correctamente. Devuelve un estado que no es cero, lo que significa que se produjo un error durante el procesamiento del comando. Es probable que desee agregar algún argumento a su comando yum para arreglar eso.

Su código podría mostrar este error de esta manera:

import subprocess try: subprocess.check_output("dir /f",shell=True,stderr=subprocess.STDOUT) except subprocess.CalledProcessError as e: raise RuntimeError("command ''{}'' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))


La palabra check_ en el nombre significa que si el comando (el shell en este caso que devuelve el estado de salida del último comando ( yum en este caso)) devuelve un estado distinto de cero, entonces aumenta la excepción CalledProcessError . Es por diseño. Si el comando que desea ejecutar puede devolver un estado distinto de cero en caso de éxito, entonces capture esta excepción o no use check_ methods. Puede usar subprocess.call en su caso porque está ignorando la salida capturada, por ejemplo:

import subprocess rc = subprocess.call([''grep'', ''pattern'', ''file''], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) if rc == 0: # found ... elif rc == 1: # not found ... elif rc > 1: # error ...

No necesita shell=True para ejecutar los comandos de su pregunta.