PROBLÈME: Chaque fois que je lance cette fonction python dans mon script monkeyrunner.py, il ouvre une nouvelle instance de fond (cmd, adb, et conhost). Et donc, dans mon script d'automatisation, si j'ai une boucle qui utilise 100 fois, je vais voir 100 de chaque cmd, adb et conhost en arrière-plan (je le sais parce que je sais "ps" dans PowerShell pour obtenir la liste des processus.) Le but de la fonction, si vous êtes curieux, est de rechercher des messages logcat à partir de la tablette Android attachée USB, pour voir quand les processus sont terminés, afin que le script sache quand commander les touches de l'écran pour aller de l'avant avec les tests d'automatisation.Comment puis-je éviter de nouvelles instances de processus d'arrière-plan lors de l'appel adb dans le module subprocess python
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: Comment puis-je utiliser "sous-processus" pour ouvrir adb SANS ouvrir une nouvelle instance à chaque fois? Y at-il un moyen de fermer le sous-processus dans la même fonction?
J'ai essayé l'exemple que vous avez fourni, mais quand je l'utilise, la fonction semble être bloquée sur p.wait(). Il n'obtient jamais la boucle "for line in p.stdout:", pour rechercher le message spécifié. Il attend juste indéfiniment. – JordanViaComputer
J'apprécie la suggestion, mais "communicate()" attend qu'un processus se termine. J'ai besoin de quelque chose, qui fonctionne sous Windows, qui termine (ou tue) le sous-processus adb une fois qu'il est sorti de la boucle "if logMessage in line:". Le problème est que les librairies python (modules) que Android vous donne pour MonkeyRunner sont très limitées, et des choses comme "terminate()" ou "kill()" n'existent pas dans cette version. – JordanViaComputer
mais n'est-ce pas ce que l'option '-d' fait pour logcat? vous n'avez pas besoin de tuer adb car il sortira lui-même après avoir jeté le journal –