monkeyrunner之Monkey Runner在触摸时抛出socketexception断管

zengkefu 阅读:141 2025-02-15 21:57:57 评论:0

我在运行monkeyrunner脚本时有时会看到以下错误。
140501 17:01:58.950:S [MainThread] [com.android.chimpchat.adb.AdbChimpDevice] 发送触摸事件时出错:500 515 DOWN_AND_UP
140501 17:01:58.950:S [MainThread] [com.android.chimpchat.adb.AdbChimpDevice]java.net.SocketException:管道损坏
140501 17:01:58.950:S [MainThread] [com.android.chimpchat.adb.AdbChimpDevice] 在 java.net.SocketOutputStream.socketWrite0( native 方法)
140501 17:01:58.950:S [MainThread] [com.android.chimpchat.adb.AdbChimpDevice] 在 java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)

我如何捕获这些?有帖子建议使用 SocketException
从 java.net 导入 SocketException

然而这似乎不起作用

请您参考如下方法:

这可能不是最优雅的解决方案,但这是我想出的。

由于问题是当你杀死一个monkey脚本时,android设备上的进程没有正确清理,所以当你再次尝试连接时,你会遇到管道问题。您可以在设备本身上杀死 -9 猴子进程,您将不再遇到它。

我有两个脚本可以解决这里的问题。
这是 python :

 3 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 
  4 from time import sleep 
  5 import sys 
  6 import signal 
  7 import subprocess 
  8 
  9 device = None 
 10 
 11 def execute(): 
 12     device = MonkeyRunner.waitForConnection() 
 13     #my code here 
 17 
 18 def exitGracefully(signum, frame): 
 19     print "Exiting Gracefully..." 
 20     subprocess.call(['./killmonkey.sh']) 
 21     sys.exit(1) 
 22 
 23 if __name__ == '__main__': 
 24     signal.signal(signal.SIGINT, exitGracefully) 
 25     execute() 

和杀死猴子脚本:
#!/bin/bash 
 
var=$(adb shell ps | grep monkey | awk '{print $2}') 
echo $var 
adb shell kill -9 $var 

当我 ctrl+c 运行 python 猴子脚本时,它会调用 killmonkey,它会终止所连接的 android 设备上的进程

这仅在只有一个设备连接时才有效,因为它没有指定设备 ID。不是很优雅,但我觉得它很有效。


标签:Exception
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号