1

我正在使用以下脚本截取屏幕截图:

def snap():
    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
    print "Waiting for device.."
    device = MonkeyRunner.waitForConnection()
    print "Device found.."
    result = device.takeSnapshot()
    print "Clicked.."
    now = datetime.datetime.now()
    file = "C:\\Workspace\\"+now.strftime("%d%m%Y-%H%M%S")+".png"
    result.writeToFile(file,'png')
    print file

我把它放在一个while循环中,它适用于一个屏幕截图。但是在那张截图之后,输出会像这样无限地挂起:

C:\Program Files\Android\android-sdk\tools>monkeyrunner C:\Workspace\snap.py
Click (y/n)?y
User said: y
Calling function..
Waiting for device..
Device found..
Clicked..
C:\Workspace\19042011-155124.png
Click (y/n)?y
User said: y
Calling function..
Waiting for device..

如何防止代码阻塞并继续截屏?这是设备内存问题吗?

4

3 回答 3

2

移出device = MonkeyRunner.waitForConnection()循环并保持与设备的连接打开。

于 2011-04-19T14:58:26.137 回答
0

要强制断开连接,您可能会终止该进程。不优雅,但无法关闭来自 monkeyrunner 的连接。

...
pid = int(filter(lambda p: len(p) == 9 and p[8] == 'com.android.commands.monkey', map(lambda l: l.split(), device.shell('ps').splitlines()))[0][1])
print "killing %s" % pid
device.shell("kill %d" % pid)
device = None
...
于 2011-04-21T00:24:13.927 回答
0

我宁愿在这样的monkeyrunner脚本中使用shell中的adb pull命令

 
os.system('adb pull /dev/graphics/fb0 image')
subprocess.call('ffmpeg -vframes 1 -vcodec rawvideo -loglevel quiet -f rawvideo -pix_fmt rgba -s 480x854 -i image -f image2 -vcodec png image.png')

注意:它使用 ffmpeg 将原始数据转换为 png 文件。FFMPEG 应该在路径
中 这样做是因为经常发生快照() API 运行异常。
480x854 是设备分辨率,根据您的设备更改。
通过这种方法,我可以拍摄一系列快照。

如果您对 device.takesnapshot() 非常执着,请尝试在两者之间添加 time.sleep(),它可能会有所帮助。

于 2011-08-02T07:11:20.107 回答