Python (在Ubuntu服务器上使用';imgkit');wkhtmltopdf:无法连接到任何X显示器

Python (在Ubuntu服务器上使用';imgkit');wkhtmltopdf:无法连接到任何X显示器,python,ubuntu,wkhtmltopdf,xvfb,imgkit,Python,Ubuntu,Wkhtmltopdf,Xvfb,Imgkit,我有一个在远程Ubuntu服务器上运行的python脚本。在我的代码中,我创建了一个HTML文件,然后将其转换为png。因此,我选择使用imgkit,这项工作做得非常好(在将python脚本上传到远程Ubuntu服务器之前,我在Mac OS上测试了我的代码): 现在,问题是Ubuntu服务器没有安装imgkit和wkhtmltopdf。因此,我运行了以下命令: sudo pip install imgkit sudo apt-get install xvfb 然后: 然后返回错误: QXcb

我有一个在远程Ubuntu服务器上运行的python脚本。在我的代码中,我创建了一个HTML文件,然后将其转换为png。因此,我选择使用imgkit,这项工作做得非常好(在将python脚本上传到远程Ubuntu服务器之前,我在Mac OS上测试了我的代码):

现在,问题是Ubuntu服务器没有安装imgkit和wkhtmltopdf。因此,我运行了以下命令:

sudo pip install imgkit
sudo apt-get install xvfb
然后:

然后返回错误:

QXcbConnection: Could not connect to display 
Could not connect to any X display.


You need to install xvfb(sudo apt-get install xvfb, yum install xorg-x11-server-Xvfb, etc), 
then add option: {"xvfb": ""}.
到目前为止还不错。因此,我运行了以下命令:

sudo pip install imgkit
sudo apt-get install xvfb
这起作用了。但是Ubuntu服务器仍然返回相同的错误。现在,首先,我不知道什么:
然后添加选项:{“xvfb”:“}.
偶数的意思。我试着在网上寻找答案,人们之前引用过,但没有解释人们应该在终端上做什么或写什么。我还觉得我缺少了wkhtmltopdf的扩展,但我不确定是哪个扩展(同样,我运行了一个在线搜索,但我比其他任何东西都更困惑。我在堆栈溢出上发现了类似的线程,但与我遇到的问题完全不同)。任何帮助都将不胜感激

非常感谢 顺致敬意,
贝尔蒂

我没有找到问题的答案:
然后添加选项:{“xvfb”:“}

然而,我能够让我的代码工作。有两种解决办法

1) 使用wkhtmltopdf:

import os

os.system("xvfb-run -a wkhtmltopdf %s %s"%('filenameIn.html','filenaneOut.png'))
这将生成PDF文件,而无需设置虚拟显示

2) 使用pyvirtualdisplay设置虚拟显示:

import imgkit
from pyvirtualdisplay import Display

display = Display(visible=0, size=(600,600))
display.start()
imgkit.from_file("filenameIn.html", "filenameOut.png")
display.stop()
事实上,2)之前已得到回答,我在搜索StackOverflow时错过了它:

注意:您可以结合使用1)和2):使用wkhtmltopdf直接转换为png,但使用虚拟显示(否则png将不会显示结果图像,至少对我来说是这样)

我认为这会有帮助 贝尔蒂

------------------------------------编辑-----------------------------------


我的解决方案中有一个错误(现已修复):2):它应该是“filenameOut.png”而不是“filenameOut.html”

我没有找到问题的解决方案:
然后添加选项:{“xvfb”:“}

然而,我能够让我的代码工作。有两种解决方案

1) 使用wkhtmltopdf:

import os

os.system("xvfb-run -a wkhtmltopdf %s %s"%('filenameIn.html','filenaneOut.png'))
这将生成PDF文件,而无需设置虚拟显示

2) 使用pyvirtualdisplay设置虚拟显示:

import imgkit
from pyvirtualdisplay import Display

display = Display(visible=0, size=(600,600))
display.start()
imgkit.from_file("filenameIn.html", "filenameOut.png")
display.stop()
事实上,2)之前已得到回答,我在搜索StackOverflow时错过了它:

注意:您可以结合使用1)和2):使用wkhtmltopdf直接转换为png,但使用虚拟显示(否则png将不会显示结果图像,至少对我来说是这样)

我认为这会有帮助 贝尔蒂

------------------------------------编辑-----------------------------------


我的解决方案中有一个错误(现已修复):2):它应该是“filenameOut.png”而不是“filenameOut.html”

我找到了解决方法

事实证明,解决方案在信息中非常明确,但我们不知何故忽略了这一点

因此,在使用此命令后,sudo apt get install xvfb

我们所要做的就是在options dict中添加
{“xvfb”:“}
,并将其传递给方法

例如:

options={'xvfb': ''}
imgkit.from_url('http://google.com', 'out.png', options=options)

我希望这有帮助

我找到了解决办法

事实证明,解决方案在信息中非常明确,但我们不知何故忽略了这一点

因此,在使用此命令后,sudo apt get install xvfb

我们所要做的就是在options dict中添加
{“xvfb”:“}
,并将其传递给方法

例如:

options={'xvfb': ''}
imgkit.from_url('http://google.com', 'out.png', options=options)
我希望这有帮助