Paraview python 使用离屏图像渲染

Paraview python use offscreen image rendering

我正在尝试在远程 linux 机器上的非交互式 PBS 作业中使用 Paraview 生成图像。从命令行,如果我有一个名为 cone.py 的文件,其内容如下

from paraview.simple import *
Cone()
Show()
SaveScreenshot('cone.png')

然后我在命令行中输入 pvpython cone.py,然后弹出 window 显示圆锥体的图像,图像被保存。我不希望 window 弹出。即使我使用 pvbatch cone.pypvbatch cone.py --use-offscreen-rendering 也是如此。如果我尝试从 PBS 作业中 运行 此代码,则不会生成图像(可能是因为它无法生成 window)并生成以下错误消息:

ERROR: In /home/kitware/Dashboards/buildbot/paraview-debian4dash-linux-shared-release_qt4_superbuild/source-paraview/VTK/Rendering/OpenGL/vtkXOpenGLRenderWindow.cxx, line 542
vtkXOpenGLRenderWindow (0x139559c0): bad X server connection. DISPLAY=/var/spool/PBS/mom_priv/jobs/1443323.rrlogin.internal.SC: line 8: 21926 Aborted                 pvbatch cone.py

/home/kitware 不是我机器上的有效目录。任何帮助将不胜感激。

如果您的远程 Linux 机器安装了 X,您需要在 运行 pvbatch 之前设置您的 DISPLAY 变量。如果您的远程 Linux 机器没有安装 X,您将需要使用 OSMesa 进行构建(信息和说明 here)。

看起来您正在将官方 ParaView 二进制文件用于没有可访问 X 服务器的非交互式 PBS 作业。您有两个选择:

  1. 请与您的网站管理员联系,看看是否有办法为您的工作启动 X 服务器。如果您的远程计算机具有 GPU,则通常会出现这种情况。
  2. 使用 OSMesa(代表离屏台面)支持从源代码构建 ParaView。如果您使用 OpenGL2 后端构建 ParaView 5.0 或更高版本,请查看此 wiki page for details. Also refer to this blog post。这将在没有可访问的 X 服务器的系统上工作。

您不能在 X-less 系统上使用在 paraview.org 分发的二进制文件。 --use-offscreen-rendering 仍然需要访问 X 服务器来创建 OpenGL 上下文,除非使用 OSMesa 支持进行构建(在这种情况下不需要命令行选项)。如果你想知道为什么命令行选项呢?这是为了避免在支持 X 的系统上创建弹出窗口 window。