sirve que python3 para módulo examples ejemplo check_output python subprocess adb

que - ¿Cómo obtener tanto el código de retorno como el resultado del subproceso en Python?



subprocess check_output python3 (1)

Esta pregunta ya tiene una respuesta aquí:

Al desarrollar la biblioteca de envoltorios de Python para el Debug Bridge de Android (ADB), estoy usando un subproceso para ejecutar comandos adb en shell. Aquí está el ejemplo simplificado:

import subprocess ... def exec_adb_command(adb_command): return = subprocess.call(adb_command)

Si el comando ejecutado correctamente exec_adb_command devuelve 0, que está bien.

Pero algunos comandos adb no solo devuelven "0" o "1", sino que también generan algunos resultados que también quiero capturar. dispositivos adb por ejemplo:

D:/git/adb-lib/test>adb devices List of devices attached 07eeb4bb device

Ya he intentado subprocess.check_output () para ese propósito, y devuelve salida pero no el código de retorno ("0" o "1").

Lo ideal sería obtener una tupla donde t [0] es el código de retorno y t [1] es la salida real.

¿Me estoy perdiendo algo en el módulo de subproceso que ya permite obtener este tipo de resultados?

¡Gracias!


Popen y la comunicación le permitirán obtener la salida y el código de retorno.

from subprocess import Popen,PIPE,STDOUT out = Popen(["adb", "devices"],stderr=STDOUT,stdout=PIPE) t = out.communicate()[0],out.returncode print(t) (''List of devices attached /n/n'', 0)

check_output también puede ser adecuado, un estado de salida distinto de cero generará un CalledProcessError:

from subprocess import check_output, CalledProcessError try: out = check_output(["adb", "devices"]) t = 0, out except CalledProcessError as e: t = e.returncode, e.message

También debe redireccionar stderr para almacenar la salida de error:

from subprocess import check_output, CalledProcessError from tempfile import TemporaryFile def get_out(*args): with TemporaryFile() as t: try: out = check_output(args, stderr=t) return 0, out except CalledProcessError as e: t.seek(0) return e.returncode, t.read()

Simplemente pasa tus comandos:

In [5]: get_out("adb","devices") Out[5]: (0, ''List of devices attached /n/n'') In [6]: get_out("adb","devices","foo") Out[6]: (1, ''Usage: adb devices [-l]/n'')