SI se usa mucho en el código que desea ejecutar pero ese código no tiene que mantenerse a largo plazo (o necesita una solución rápida independientemente de los posibles dolores de cabeza de mantenimiento en el futuro), entonces podría esquivar el golpe (también conocido como parche de mono) en cualquier lugar donde se importe el subproceso ...
Simplemente levante el código de 2.7 e insértelo así ...
import subprocess
if "check_output" not in dir( subprocess ):
def f(*popenargs, **kwargs):
if 'stdout' in kwargs:
raise ValueError('stdout argument not allowed, it will be overridden.')
process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
output, unused_err = process.communicate()
retcode = process.poll()
if retcode:
cmd = kwargs.get("args")
if cmd is None:
cmd = popenargs[0]
raise subprocess.CalledProcessError(retcode, cmd)
return output
subprocess.check_output = f
Es posible que se requiera inquietud leve.
Tenga en cuenta que la responsabilidad recae en usted para mantener pequeños puertos sucios como este. Si se descubren errores y se corrigen en la última versión de Python, entonces a) debe notarlo yb) actualizar su versión si desea mantenerse seguro. Además, anular y definir las funciones internas por ti mismo es la peor pesadilla del próximo chico, especialmente cuando el próximo chico eres USTED varios años después y te has olvidado de los trucos divertidos que hiciste la última vez. En resumen: rara vez es una buena idea.
CalledProcessErrorcuando el proceso devuelve un código de retorno distinto de cero.