执行 Shell 命令

该功能可以让您在设备上执行 Shell 命令或者完整的 Shell 脚本,所有的命令均会以 root 的身份执行,同时为了兼容长期运行的脚本,本功能也支持后台运行不退出的脚本。

前台命令执行

您可以像下面这样使用,来快速执行一个命令或者脚本,此操作会卡住当前进程,所以您的脚本或者命令的运行时间不能太长,用于执行时间短(0-10秒内)的脚本。

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

输出返回的状态码,以及标准输出和标准错误。

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

后台命令执行

后台命令执行用于执行时间长的脚本,因考虑可能用户可能写死循环、脚本无限输出等导致内存被占满,无法获知后台脚本执行结果,如果您要获取脚本的输出信息,请自行在脚本中进行文件输出。

以下调用将执行一个长时间的脚本 sleep,返回一个 sid 字符串,为这个后台脚本的 ID。

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

如果脚本出现非预期的状况,您也可以通过如下的调用,强制结束正在后台运行的脚本。

d.kill_background_script(sid)

您可以通过如下的调用,通过 sid 检查后台脚本是否运行结束。

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