将Appium作为python子进程运行的危险?

时间:2015-07-07 15:16:37

标签: python subprocess appium

我使用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 kwargs,或者让它们指向文件时,行为将恢复正常。 stdout / stderr是否存在导致此问题的依赖?

1 个答案:

答案 0 :(得分:2)

除非您从管道中读取,例如使用PIPE,否则不要使用out, err = self.app.communicate()。否则,子进程可能会挂起,这就是subprocess.call() docs warn

的原因
  

请勿对此功能使用stdout=PIPEstderr=PIPE。孩子   如果它生成足够的输出到管道来填充,则进程将阻塞   OS管道缓冲区,因为没有读取管道。

subprocess.call()不会消耗管道,因此您不应将PIPE传递给它。 To discard output, you could use DEVNULL instead。如果您以后不使用Popen(),则同样适用于self.app.stdout/stderr