Exécuter des commandes Shell¶
Cette fonctionnalité vous permet d'exécuter des commandes Shell ou des scripts Shell complets sur l'appareil. Toutes les commandes sont exécutées avec les privilèges root. De plus, pour prendre en charge les scripts de longue durée, cette fonctionnalité supporte également les scripts qui s'exécutent en arrière-plan sans se terminer.
Exécution de commandes en premier plan¶
Vous pouvez l'utiliser comme indiqué ci-dessous pour exécuter rapidement une commande ou un script. Cette opération bloque le processus actuel, par conséquent, la durée d'exécution de votre script ou de votre commande ne doit pas être trop longue. Elle est destinée aux scripts dont le temps d'exécution est court (entre 0 et 10 secondes).
cmd = d.execute_script("whoami")
>>> d.execute_script("notexist")
exitstatus: 127
stderr: "mksh: <stdin>[2]: notexist: inaccessible or not found\n"
Retourne le code de statut, la sortie standard et l'erreur standard.
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
Exécution de commandes en arrière-plan¶
L'exécution de commandes en arrière-plan est utilisée pour les scripts de longue durée. Étant donné que l'utilisateur pourrait écrire des boucles infinies ou des scripts avec une sortie illimitée, ce qui pourrait saturer la mémoire, il n'est pas possible de connaître le résultat d'exécution du script en arrière-plan. Si vous avez besoin d'obtenir les informations de sortie du script, veuillez gérer vous-même la sortie vers un fichier dans le script.
L'appel suivant exécute un script de longue durée sleep et retourne une chaîne de caractères sid, qui est l'ID de ce script en arrière-plan.
script = "sleep 100; exit 0;"
sid = d.execute_background_script(script)
Si le script rencontre une situation inattendue, vous pouvez également utiliser l'appel suivant pour forcer l'arrêt du script s'exécutant en arrière-plan.
d.kill_background_script(sid)
Vous pouvez utiliser l'appel suivant pour vérifier, via le sid, si le script en arrière-plan a terminé son exécution.
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