0

アプリ(例:com.clov4r.android.nil)を操作するとき(例:サルのテストを行う)にCPU占有率を記録し、アプリを終了する(例:サルのテストを終了する)ときに記録を終了したいと考えています。pythonで実現するには?

いくつかのコード:

packagename = 'com.clov4r.android.nil'
cmd1 = 'adb shell top -d 5 | grep com.clov4r.android.nil'
cmd2 = 'adb shell monkey -v -p com.clov4r.android.nil --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes -s 2345 100'
t1 = threading.Thread(target=subprocess.call(cmd1, stdout=open(r'123.txt', 'w'))) 
t2 = threading.Thread(target=subprocess.call(cmd2))
4

2 に答える 2

0

イベントは、スレッド間で通信するための優れた方法です ( http://docs.python.org/2/library/threading.html#event-objects )。ただし、もう 1 つの問題は、top コマンドが本質的に永久に実行されることです。私はこのようなことをします:

def run_top(event, top_cmd):
    s = subprocess.Popen(top_cmd, stdout=open('123.txt', 'w'))
    event.wait()  # Wait until event is set, then kill subprocess
    s.kill()

def run_monkey(event, monkey_cmd):
    subprocess.call(monkey_cmd)
    event.set()  # Once we're finished set the event to tell the other thread to exit

event = threading.Event()
threading.Thread(target=run_top, args=(event, your_top_command)).start()
threading.Thread(target=run_monkey, args=(event, your_monkey_command)).start()

スレッドを強制終了する方法もあるかもしれませんが、それはかなり醜いです。この方法ははるかに制御されています。

また、run_monkey() をスレッドで実行する必要はないと言いますが、それを必要とする可能性のある他のコードはわかりません。

于 2013-02-20T08:04:19.777 に答える
0

Thread.join()を使用できます。

import threading, time

def worker():
    time.sleep(5)

t = threading.Thread(target=worker)
t.start()
t.join()
print('finished')
于 2013-02-20T07:05:31.647 に答える