サブプロセス モジュールを使用して adb バイナリ用に Python3 で単純なラッパー モジュールを作成していますが、「シェル」コマンドは単一のワンショット コマンドを実行するか、引数なしで対話型シェルを実行できます。
ある時点で、私 (または他の誰か) が Vte のようなものを使用して GUI でこれを利用する可能性がありますが、関数が返すのに何が正気なのか、またはこのインスタンスで Popen を使用する必要があるかどうかについてはわかりません。
Python で ADB のラッパーを実装したときに、 subprocessモジュールを使用することにしました。コマンドが 0 ステータスで返されることを確認するため、check_output(...)関数が便利であることがわかりました。によって実行されたコマンドcheck_output(...)
がゼロ以外のステータスを返した場合、CalledProcessErrorがスローされます。ADB
特定のコマンドの実行に失敗したことをユーザーに報告できるので、これは便利だと思いました。
メソッドの実装方法のスニペットを次に示します。私のADB ラッパーの実装を参照してください。
def _run_command(self, cmd):
"""
Execute an adb command via the subprocess module. If the process exits with
a exit status of zero, the output is encapsulated into a ADBCommandResult and
returned. Otherwise, an ADBExecutionError is thrown.
"""
try:
output = check_output(cmd, stderr=subprocess.STDOUT)
return ADBCommandResult(0,output)
except CalledProcessError as e:
raise ADBProcessError(e.cmd, e.returncode, e.output)