【问题标题】:headless python script requires x-server to Run无头 python 脚本需要 x-server 才能运行
【发布时间】:2018-10-04 22:08:22
【问题描述】:

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

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 服务器以及如何避免这种情况?

【问题讨论】:

  • 错误在哪一行?
  • 你应该使用的术语“独立”是“无头”。
  • 错误语句没有指出是哪一行导致了崩溃,即使我手动启动它也没有
  • 尝试了@MegaIng 解决方案,但对我不起作用。该脚本仍然需要连接到 x 服务器。还有什么建议吗?

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


【解决方案1】:

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

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

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

(取自gis.se,因为我们无法标记none SO问题的重复)

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 2016-10-22
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多