Ejecutar Comandos de Shell

Esta función le permite ejecutar comandos de Shell o scripts de Shell completos en el dispositivo. Todos los comandos se ejecutarán con privilegios de root. Además, para ser compatible con scripts de larga duración, esta función también admite la ejecución de scripts en segundo plano que no finalizan.

Ejecución de Comandos en Primer Plano

Puede usarlo como se muestra a continuación para ejecutar rápidamente un comando o script. Esta operación bloqueará el proceso actual, por lo que el tiempo de ejecución de su script o comando no debe ser demasiado largo. Se utiliza para ejecutar scripts de corta duración (dentro de 0-10 segundos).

cmd = d.execute_script("whoami")
>>> d.execute_script("notexist")
exitstatus: 127
stderr: "mksh: <stdin>[2]: notexist: inaccessible or not found\n"

La salida devuelve el código de estado, así como la salida estándar y el error estándar.

print (cmd.stdout)
print (cmd.stderr)
print (cmd.exitstatus)
>>> result = d.execute_script("id")
>>> print (result.stdout)
b'uid=0(root) gid=0(root)\n'
>>> print (result.stderr)
b''
>>> print (result.exitstatus)
0

Ejecución de Comandos en Segundo Plano

La ejecución de comandos en segundo plano se utiliza para ejecutar scripts de larga duración. Debido a la posibilidad de que el usuario escriba bucles infinitos o que el script genere una salida ilimitada, lo que podría agotar la memoria, no es posible conocer el resultado de la ejecución del script en segundo plano. Si necesita obtener la información de salida del script, por favor, redirija la salida a un archivo dentro del propio script.

La siguiente llamada ejecutará un script de larga duración sleep y devolverá una cadena de texto sid, que es el ID de este script en segundo plano.

script = "sleep 100; exit 0;"
sid = d.execute_background_script(script)

Si el script encuentra una situación inesperada, también puede forzar la finalización del script que se está ejecutando en segundo plano mediante la siguiente llamada.

d.kill_background_script(sid)

Puede verificar si el script en segundo plano ha finalizado a través de su sid utilizando la siguiente llamada.

d.is_background_script_finished(sid)
>>> script = "sleep 100; exit 0;"
>>> sid = d.execute_background_script(script)
>>> print (sid)
ba06da93-c3aa-4457-b90e-247e42a16207
>>> d.is_background_script_finished(sid)
False
>>> d.kill_background_script(sid)
True
>>> d.is_background_script_finished(sid)
True