我们正在尝试找到如何在使用PyVirtualDisplay时避免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属性完成的:
现在,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 进程的正确方法是什么,以便它们被终止并且不会滞留?
非常感谢!
subprocess.Popen
,您可以在这些对象上调用terminate。如果您无法访问它们,则可以尝试在所有子进程上使用os.kill。 - alejandro