«Не удалось подключиться к дисплею» на сервере EC2 - PullRequest
3 голосов
/ 22 мая 2019

Я пытаюсь экспортировать некоторые таблицы данных панд в виде изображений. Я посмотрел на многие решения и нашел то, что казалось лучшим выбором. Я следовал инструкциям на этом сайте , и все работало хорошо локально.

Однако при попытке запустить этот скрипт Python на сервере EC2 я получаю следующую ошибку:

OSError: wkhtmltoimage exited with non-zero code 1. error:
qt.qpa.screen: 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": ""}.

Я попытался установить в xfvb в соответствии с указаниями, но это не работает (я думаю, потому что wkhtmltopdf вызывается из другой библиотеки). Я развернул новый сервер, чтобы переустановить все с нуля, чтобы устранить эту потенциальную проблему. Все еще ничего.

Я гуглил проблему и попробовал несколько случайных предложений, но без кубиков.

Моя цель - создать файл SVG из фрейма данных pandas (преобразованного в html). Можно ли сделать облачный сервер без монитора? Есть ли лучший способ создания изображений таблиц для отчетов в формате PDF из панд?

Код:

import pandas
data = pandas.read_csv(open("biostats.csv", "r"))

css = """
<style type=\"text/css\">
table {
color: #333;
font-family: Helvetica, Arial, sans-serif;
width: 640px;
border-collapse:
collapse; 
border-spacing: 0;
}"""

text_file = open("filename.html", "a")
# write the CSS
text_file.write(css)
# write the HTML-ized Pandas DataFrame
text_file.write(data.to_html())

imgkitoptions = {"format": "svg"}
imgkit.from_file("filename.html", outputfile, options=imgkitoptions)
text_file.close()

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Одним из решений было бы запустить это:

from pyvirtualdisplay import Display
display = Display(visible=0, size(600,600))
display.start()
imgkit.from_file("filename.html", outputfile, options=imgkitoptions)
1 голос
/ 22 мая 2019

попробуйте сделать echo $DISPLAY на вашем удаленном хосте.Если он окажется пустым, это означает, что вы не подключены ни к какому экрану дисплея, и, следовательно, выходные данные не будут отображаться.

Если это так, попробуйте выполнить команду export DISPLAY=localhost:10.0, а затем повторно запустите исходную команду

Примечание: при подключении к удаленному серверу используйте ssh -X

...