【发布时间】:2015-05-27 08:59:26
【问题描述】:
我在 Windows 上使用最新的 AndroidViewClient 版本。脚本点击下一步按钮后,应用程序连接到远程服务器并等待响应,在此期间屏幕上会出现类似“等待进度条”。问题是等待时间是随机的。我使用 while 循环等待下一页屏幕的特定视图,类似于这篇文章“Waiting for a specific view on androidviewclient”。但是,如果 time.sleep() 太短,则脚本将永远挂在代码行 vc.dump() 上,恰好在 ViewServer 的此方法 dump() 的代码行“received += s.recv(1024)”上。有一个 watchguard ViewClient.setAlarm(120) 但 signal.alarm 在 Windows 上不起作用。为什么不在接收到 += s.recv(1024) 之前使用 s.settimeout(120) 和 try/except block 来防止 Windows 上的阻塞状态?
【问题讨论】:
-
更多信息,当脚本永远挂起并且远程服务器最终返回响应时,屏幕上会显示一个新页面,我可以在另一个终端上手动执行命令转储并找到我正在寻找的特定视图没有任何问题,但正在运行的脚本一直挂着,阻止它的唯一方法就是杀死它。
-
如果您在 Windows 上测试您的解决方案(不幸的是我做不到)并且可以工作,我会很高兴合并一个补丁。
-
是的,在方法 dump() 中,我为套接字上的任何操作添加了一个监视超时,以防止在所有平台上都可用的阻塞状态。以下是更改: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(15)
-
while True: if DEBUG_RECEIVED: print >>sys.stderr, " reading from socket..." try: received += s.recv(1024) except Exception, ex: print >> sys. stderr, "ERROR:", ex if doneRE.search(received[-7:]): break windows 上的测试工作正常,接收数据的套接字不再阻塞。
-
@dtmilano 不幸的是,设置套接字超时仍然有一些问题。我用另一种解决方案进行了测试,它看起来很强大并且很有前途。我使用定义了超时的模块 eventlet 并且它是线程的。我测试,没有更多的挂起。我会让脚本 24/24 运行,然后看看。以下是我在 viewclient.py 中添加的代码
标签: python emulation dump androidviewclient