命令執行¶
該功能可以讓您在設備上執行 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