当使用PyVirtualDisplay时,试图找出如何避免在我们的Python应用程序中挂起Xvfb进程。根本的问题是调用display.stop() (请参阅下面的代码示例)似乎没有正确关闭Xvfb进程。
PyVirtualDisplay非常简单地被使用:
from pyvirtualdisplay import Display
display = Display(backend='xvfb')
display.start()
... # Some stuff happens here
display.stop()现在,Display类有了一些修改,以防止Xvfb使用TCP端口:基本上,将-nolisten tcp添加到执行命令中。修改是通过重写适当的XfvbDisplay类的_cmd属性完成的:
@property
def _cmd(self):
cmd = [PROGRAM,
dict(black='-br', white='-wr')[self.bgcolor],
'-screen',
str(self.screen),
'x'.join(map(str, list(self.size) + [self.color_depth])),
self.new_display_var,
'-nolisten',
'tcp'
]
return cmd在这种情况下结束Xvfb进程的正确方法是什么,这样就可以终止Xvfb进程而不再停留了?
非常感谢!
发布于 2013-09-16 15:25:56
您的显示(因为它继承自EasyProcess )将在display.popen上有一个popen属性。如果EasyProcess不能正常工作,您可以使用它来终止。
所以,你可以这样做:
display.popen.terminate()或
display.popen.kill()发布于 2016-02-15 22:05:57
The answer by Jordan不是为我工作的。这样做是有效的:
display.sendstop()发布于 2022-05-04 17:09:30
这些解决方案对我都没有用。它说display没有属性sendstop或popen。
https://stackoverflow.com/questions/18476510
复制相似问题