gpt4 book ai didi

jython - 如何在 MonkeyRunner 中捕获 SocketExceptions?

转载 作者:行者123 更新时间:2023-12-04 14:03:25 24 4
gpt4 key购买 nike

使用 MonkeyRunner 时,我经常收到如下错误:

120830 18:39:32.755:S [MainThread] [com.android.chimpchat.adb.AdbChimpDevice] Unable to get variable: display.density
120830 18:39:32.755:S [MainThread] [com.android.chimpchat.adb.AdbChimpDevice]java.net.SocketException: Connection reset

根据我的阅读,有时 adb 连接会变坏,您需要重新连接。唯一的问题是,我无法 catch SocketException .我会像这样包装我的代码:
try:
density = self.device.getProperty('display.density')
except:
print 'This will never print.'

但异常显然并未一直向调用者提出。我已经验证 MonkeyRunner/jython 可以按照我期望的方式捕获 Java 异常:
>>> from java.io import FileInputStream
>>> def test_java_exceptions():
... try:
... FileInputStream('bad mojo')
... except:
... print 'Caught it!'
...
>>> test_java_exceptions()
Caught it!

我该如何处理这些套接字异常?

最佳答案

每次启动 MonkeyRunner 时,您都会遇到该错误,因为 monkey --port 12345当您的脚本停止时,设备上的命令不会停止。这是猴子的一个错误。

解决此问题的更好方法是在 SIGINT 时杀死猴子。发送到您的脚本(当您 ctrl+c 时)。换句话说:$ killall com.android.commands.monkey .

快速的方法:

from sys, signal
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

device = None

def execute():
device = MonkeyRunner.waitForConnection()
# your code

def exitGracefully(self, signum, frame):
signal.signal(signal.SIGINT, signal.getsignal(signal.SIGINT))
device.shell('killall com.android.commands.monkey')
sys.exit(1)

if __name__ == '__main__'
signal.signal(signal.SIGINT, exitGracefully)
execute()

编辑:
作为附录,我还找到了一种注意 Java 错误的方法: Monkey Runner throwing socket exception broken pipe on touuch

关于jython - 如何在 MonkeyRunner 中捕获 SocketExceptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12208269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com