所以我有gmsh
的片段。
直接执行正常:
!gmsh -3 -algo meshadapt tmp_0.geo -o SFM.msh
从代码执行失败时:
try:
out = subprocess.check_output(
["gmsh", "gmsh -3 -algo meshadapt tmp_0.geo -o SFM.msh"],
stderr=subprocess.STDOUT
).strip().decode('utf8')
except subprocess.CalledProcessError as e:
out = e.output
print(out)
使用:
B“--------------------------------------------- ----------------------------- \ n [[23419,1],0]:一个高性能的Open MPI指向点消息传递模块\ n 无法找到任何相关的网络接口:\ n \ n模块:OpenFabrics (openib)\ n主机:931136e3f6fe \ n \ n将使用其他传输方式 相反,虽然这可能导致\ nlower 性能。\ n ---------------------------------------------- ---------------------------- \ n \ x1b [1m \ x1b [31mFatal:无法打开显示:(FLTK内部) 误差)\ X1B [0米\ n ------------------------------------------ -------------------------------- \ n \ nMPI_ABORT在通讯器MPI_COMM_WORLD \ n中的等级0上被调用,带有错误代码 1. \ n \ n注意:调用MPI_ABORT会导致Open MPI终止所有MPI进程。\ n您是否可能看到其他进程的输出, 当Open MPI杀死时,依赖于\ nexactly 它们。\ n ---------------------------------------------- ---------------------------- \ n“个
那么如何在Python 3代码中模仿jupyter中的!
执行?
@Hristo:
_ = / opt / conda / bin / jupyter SHLVL = 1 PATH = / opt / conda / bin:/ opt / conda / bin:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin :在/ usr / bin中:/ sbin目录:/ bin中 HOSTNAME = 931136e3f6fe HOME = / root LC_ALL = C.UTF-8 PWD = / JPY_PARENT_PID = 1 LANG = C.UTF-8 TERM = xterm-color CLICOLOR = 1 PAGER = cat GIT_PAGER = cat MPLBACKEND = module://ipykernel.pylab.backend_inline env DISPLAY =:0 gmsh -3 -algo meshadapt tmp_0.geo -o SFM.msh
@Gilles: 结果相同。
答案 0 :(得分:1)
似乎根本原因是未设置$DISPLAY
环境变量。
首先确保在您的Jupyter笔记本启动时设置$DISPLAY
。
您可能还必须指示mpirun
将其导出到所有MPI任务。
从Open MPI 3.0.0开始,您可以实现此目的
export OMPI_MCA_mca_base_env_list=DISPLAY
在开始你的Jupyter笔记本之前
顺便问一下,你的应用程序是否需要打开X显示器? 如果它没有做任何图形,那么可以调整它以便在没有可用的显示时正常工作。
<强> [附录] 强>
另一种可能性是gmsh
认为自DISPLAY
设置后显示可用,因此它会尝试打开它并失败。您可以尝试取消设置此环境变量,并从命令行(例如交互式模式)和笔记本(例如批量模式)中查看事情的进展情况