問題: 每次我在monkeyrunner.py腳本運行這條巨蟒的功能,它打開的(CMD,亞行新的背景情況下,和conhost)。所以,在我的自動化腳本中,如果我有一個循環使用了100次,我會看到每個cmd,adb和conhost在後臺運行100個(我知道這是因爲我在powershell中輸入了「ps」以獲取進程列表)。如果您好奇,該功能的目的是從USB連接的Android平板電腦上查找logcat消息,以查看進程何時完成,以便腳本知道何時命令屏幕觸摸繼續進行自動化測試。如何防止後臺進程的新實例調用蟒子模塊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
問題: 如何使用「子」打開ADB不必每次都打開一個新的實例?有沒有辦法在同一個函數中關閉子進程?
我試過你提供的例子,但是當我使用它時,函數似乎卡在p.wait()上。它永遠不會到達「for p.stdout:」循環中的行,以查找指定的消息。它只是無限期地等待。 – JordanViaComputer
我欣賞這個建議,但「溝通()」等待一個進程終止。我需要一些可以在Windows上運行的東西,一旦它突破「if logMessage in line:」循環,就會終止(或終止)adb子進程。問題是,Android爲MonkeyRunner提供的python庫(模塊)非常有限,此版本中不存在「terminate()」或「kill()」之類的東西。 – JordanViaComputer
但是這不是'-d'選項對logcat的作用麼?你不必殺死adb,因爲轉儲日誌後它會退出 –