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

2024-09-28 20:42:27 发布

您现在位置:Python中文网/ 问答频道 /正文

试图找到在使用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进程的正确方法是什么,以便它们被终止并且不会逗留?

非常感谢!


Tags: 代码selfcmd应用程序进程displayscreen关键
2条回答

您的显示,因为它继承自EasyProcess,所以在display.popen处有一个popen属性。如果EasyProcess工作不正常,可以使用此命令终止。

所以,你可以这样做:

display.popen.terminate()

或者

display.popen.kill()

The answer by Jordan对我不起作用。这起作用:

display.sendstop()

相关问题 更多 >