問題: monkeyrunner.pyスクリプトでこのPython関数を実行するたびに、(cmd、adb、とconhost)。そして、私のオートメーションスクリプトでは、100回使用するループがあれば、バックグラウンドで実行されているcmd、adb、conhostの100個を表示します(これはpowershellに "ps"プロセスのリストを取得するために)関数の目的は、好奇心が強いならば、USB接続されたAndroidタブレットからのlogcatメッセージを探し、プロセスが終了したときを確認して、スクリーンタッチをいつコマンドするかを知ることです自動化テストを進めていきます。pythonサブプロセスモジュールでadbを呼び出すときに、新しいインスタンスのバックグラウンドプロセスを防ぐ方法を教えてください。
action = "____"
waitTime = 1
def adb(logMessage, action):
start = time.time()
p = subprocess.Popen("adb logcat -v time", shell=True, cwd="C:\Users\<USERNAME>\AppData\Local\Android\sdk\platform-tools", stdout=subprocess.PIPE)
for line in p.stdout:
if logMessage in line:
print("Found message!")
break
pass
else:
continue
QUESTION: はどのように私は新しいインスタンスを毎回開くことなく、ADBを開くには、「サブプロセス」を使用することができますか?同じ機能でサブプロセスを閉じる方法はありますか?
私はあなたが提供した例を試しましたが、私がそれを使用すると、関数はp.wait()にスタックするように見えます。指定されたメッセージを探すために、 "for line in p.stdout:"ループに到達することはありません。ただ無期限に待っています。 – JordanViaComputer
私は提案を感謝しますが、 "communicate()"はプロセスが終了するのを待ちます。 Windows上で動作するsomethingsが必要な場合、「if logMessage in line:」ループから抜け出すとadbサブプロセスを終了(または終了)します。問題は、AndroidがMonkeyRunnerに与えるPythonのlibs(モジュール)が非常に限られており、 "terminate()"や "kill()"のようなものはこのバージョンには存在しないということです。 – JordanViaComputer
ですが、 '-d'オプションがlogcatに何をしているのでしょうか?あなたはログをダンプした後に自身を終了するので、adbを殺す必要はありません –