0

サブプロセス モジュールを使用して adb バイナリ用に Python3 で単純なラッパー モジュールを作成していますが、「シェル」コマンドは単一のワンショット コマンドを実行するか、引数なしで対話型シェルを実行できます。

ある時点で、私 (または他の誰か) が Vte のようなものを使用して GUI でこれを利用する可能性がありますが、関数が返すのに何が正気なのか、またはこのインスタンスで Popen を使用する必要があるかどうかについてはわかりません。

4

1 に答える 1

2

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) 
于 2013-10-10T11:39:15.557 に答える