命令実行¶
この機能を使用すると、デバイス上でシェルコマンドまたは完全なシェルスクリプトを実行できます。すべてのコマンドは、このサービスを実行しているユーザー権限で実行されます。また、長時間実行されるスクリプトとの互換性のため、バックグラウンドで実行され、終了しないスクリプトにも対応しています。
フォアグラウンド実行¶
次のようにして、コマンドやスクリプトを素早く実行できます。この操作は現在のプロセスをブロックするため、スクリプトやコマンドの実行時間は短めにしてください。実行時間が短い(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 を実行し、このバックグラウンドスクリプトのIDとなる sid 文字列を返します。
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