在使用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进程的正确方法是什么,以便它们被终止而不会逗留?
非常感谢!
由于您的显示器继承自EasyProcess,因此它将在display.popen
处具有popen属性。如果EasyProcess工作不正常,您可以使用它来终止。
所以,你可以这样做:
display.popen.terminate()
或
display.popen.kill()
Jordan的回答对我不起作用。这起了作用:
display.sendstop()
仅供参考,这些解决方案都不适合我。它说display没有sendstop或popen属性。