如何避免挂起Xvfb进程[同时使用PyVirtualDisplay]



在使用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属性。

相关内容

  • 没有找到相关文章

最新更新