命令执行

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

前台命令执行

您可以像下面这样快速执行一个命令或脚本。此操作会阻塞当前进程,因此您的脚本或命令的运行时间不宜过长,适合执行耗时较短(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