El subproceso check_output devolvió un estado de salida distinto de cero 1

Este es mi código python:

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

El primer .check_output() funciona bien, pero el segundo devuelve esto:

 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 "", line 1, in  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é pasó esto? ¿Es porque ls es el comando de shell original pero yum es el nuevo paquete? ¿Como puedó resolver esté problema?

El comando yum que inicias se ejecutó correctamente. Devuelve un estado distinto de cero, lo que significa que se produjo un error durante el procesamiento del comando. Probablemente desee agregar algún argumento a su comando yum para solucionarlo.

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, genera CalledProcessError 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 puede capturar esta excepción o no usar los métodos check_ . Podría 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.