SI se utiliza en gran medida en el código que desee ejecutar, sino que el código no tiene que ser mantenida a largo plazo (o necesita un solución rápida, independientemente de los posibles problemas de mantenimiento en el futuro), entonces usted podría golpe de pato (también conocido como parche mono) en donde ha sido importada subproceso ...
Sólo levanta el código de 2,7 e insertarlo thusly ...
import subprocess
if "check_output" not in dir(subprocess): # duck punch it in!
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 una inquietud menor.
Tenga en cuenta que la responsabilidad recae sobre usted para mantener los pequeños backports sucios como este. Si se descubren y corrigen errores en la última versión de python, entonces a) tiene que darse cuenta de eso yb) actualizar su versión si desea permanecer seguro. Además, anular & definir las funciones internas es la peor pesadilla del siguiente tipo, especialmente cuando el siguiente tipo es USTED varios años después y ¡se olvidó de los hackers que hizo la última vez! En resumen: rara vez es una buena idea.
diferencia check_output, esto no aumenta 'CalledProcessError' cuando el proceso devuelve un código de retorno distinto de cero. –
@SridharRatnakumar: por supuesto, porque hay una gran diferencia entre ellos, a saber: bloqueo y no bloqueo. ¡Son para diferentes casos de uso! – lpapp
Lo empujé en una 'lambda' como esta:' check_output = lambda args: Popen (args, stdout = PIPE) .communicate() [0] '. Solo porque estoy en un intérprete interactivo y es una especie de PITA para escribir defs de función multilínea en esos. Utilicé 'del subproceso importan Popen, PIPE' anteriormente en la sesión. – ArtOfWarfare