[英]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.