[英]Dangers of running Appium as a python subprocess?
我正在使用Appium进行UI测试,并在其上使用Robot Framework。 我正在尝试自动化测试iOS应用程序(包括Appium服务器)所需的所有服务器和服务。 这似乎在Appium内部造成了一些损坏。 特别是,在调用driver.get_elements_by_accessibility_id(id)时,我们似乎陷入了困境。
子流程启动看起来像这样:
self.app = subprocess.Popen("appium", shell=True, stdout=PIPE, stderr=PIPE)
当我们丢弃stdout / stderr kwarg或使其指向文件时,该行为将恢复正常。 是否存在对stdout / stderr的某种依赖而导致这种情况?
除非您从管道中读取,否则请不要使用PIPE
,例如,使用out, err = self.app.communicate()
。 否则,子进程可能会挂起,这就是subprocess.call()
docs warn发出警告的原因 :
请勿将此功能与
stdout=PIPE
或stderr=PIPE
一起使用。 如果子进程向管道生成足够的输出以填充OS管道缓冲区,则该子进程将阻塞,因为未从中读取管道。
subprocess.call()
不会消耗管道,因此您不应将PIPE
传递给它。 要放弃输出,可以改用DEVNULL
。 如果以后不使用self.app.stdout/stderr
Popen()
也一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.