headless python 脚本需要 x-server 运行
headless python script requires x-server to Run
我在 Python 中制作了一个无头脚本来预处理 Sentinel 图像并输出 NDVI link。
该脚本在我通过 SSH 连接访问的远程服务器(linux 容器)上运行。当我使用以下命令从终端启动脚本时,脚本运行没有错误:
python /home/foo/SentinelPPN.py
但是,通过 chronejob 自动启动时失败。输出为:"cannot connect to X server"。我没有收到其他消息,也没有指示错误发生在脚本的哪一行
我无法确定哪个操作需要 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 服务器吗?我该如何避免?
问题是 cronjob 'blocking' DISPLAY
变量,阻止 qgis
/PyQt4
正确初始化。解决方案是告诉 cronjob export
DISPLAY
变量:
* * * * * export DISPLAY=:0 && python /home/foo/SentinelPPN.py
这将 DISPLAY
设置为正确的显示(即 :0
)。
(这取自 gis.se,因为我们无法标记 none SO 问题的重复项)
我在 Python 中制作了一个无头脚本来预处理 Sentinel 图像并输出 NDVI link。 该脚本在我通过 SSH 连接访问的远程服务器(linux 容器)上运行。当我使用以下命令从终端启动脚本时,脚本运行没有错误:
python /home/foo/SentinelPPN.py
但是,通过 chronejob 自动启动时失败。输出为:"cannot connect to X server"。我没有收到其他消息,也没有指示错误发生在脚本的哪一行
我无法确定哪个操作需要 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 服务器吗?我该如何避免?
问题是 cronjob 'blocking' DISPLAY
变量,阻止 qgis
/PyQt4
正确初始化。解决方案是告诉 cronjob export
DISPLAY
变量:
* * * * * export DISPLAY=:0 && python /home/foo/SentinelPPN.py
这将 DISPLAY
设置为正确的显示(即 :0
)。
(这取自 gis.se,因为我们无法标记 none SO 问题的重复项)