0

元のコードはこちら

import subprocess as sp

cmd = ["adb","push","file","/mnt/sdcard/file"]
mysp = sp.popen(cmd, env={'ADB_TRACE':'adb'}, stdout=sp.PIPE, stderr=sp.PIPE)
stdout,stderr = mysp.communicate()

if mysp.returncode != 0:
    print stderr
else:
    print stdout

なしで正常に動作しますenv={'ADB_TRACE':'adb'}

adbenv変数を使用して任意のコマンドを実行すると、エラーが発生しました:

ADB server didn't ACK
* failed to start daemon *
error: cannot connect to daemon

adbサーバーを強制終了した後、動作しないようです

全体の出力はここにあります

OS:win7

4

1 に答える 1

1

adbには他の環境変数(など$HOME)も必要だと思います。既存の環境のクローンを作成して追加する必要がありますADB_TRACE

import os
new_env = os.environ.copy()
new_env['ADB_TRACE'] = 'adb'

# sp.popen()

ドキュメントから:

If env is not None, it must be a mapping that defines the environment variables
for the new process; these are used instead of inheriting the current process’
environment, which is the default behavior.

編集:

どうやら、それは環境そのものについてではないようです。むしろ、が設定されている場合、adbサーバーは壊れていますADB_TRACE。がない環境で事前にサーバーを起動してみてくださいADB_TRACE

于 2013-02-10T11:46:13.550 に答える