无头python脚本需要x-server才能运行

时间:2018-04-24 15:14:09

标签: python python-2.7 image-processing raster qgis

我在Python中创建了一个无头脚本来预处理Sentinel图像并输出NDVI link。 该脚本在远程服务器(linux容器)上运行,我通过SSH连接访问该服务器。当我使用以下命令从终端启动脚本时,脚本运行时没有错误:

python /home/foo/SentinelPPN.py

但是,当通过chronejob自动启动时失败。输出为:“无法连接到X服务器”。我没有得到任何其他消息,也没有迹象表明错误发生在脚本的哪一行

我无法确定哪个操作需要X服务器,因为我根本不使用GUI,并且在脚本期间没有创建可视输出。 为了以无头方式启动脚本,我使用以下设置:

import sys
import os
import qgis
from qgis.core import *
#from PyQt4.QtGui import *

app = QgsApplication([],True, None)
app.setPrefixPath("/usr", True)
app.initQgis()
sys.path.append('/usr/share/qgis/python/plugins')
from processing.core.Processing import Processing
Processing.initialize()

脚本的其余部分主要是使用以下方式启动的处理模块:

processing.runalg("...")

您能否帮我理解为什么需要X服务器?如何避免这种情况?

1 个答案:

答案 0 :(得分:1)

问题是cronjob'阻止'DISPLAY变量,阻止qgis / PyQt4正确初始化。解决方案是告诉cronjob export DISPLAY变量:

* * * * * export DISPLAY=:0 && python /home/foo/SentinelPPN.py

这会将DISPLAY设置为正确的显示(即:0)。

(这取自gis.se,因为我们无法标记无SO问题的副本)