在没有图形界面的情况下运行Salome脚本

6
我从Salome(dump)中导出了一个脚本,并希望在Python中运行它(我正在进行一些几何操作,不需要任何图形)。因此,我删除了所有的图形命令,但是当我尝试启动我的Python文件时,Python找不到Salome库。
我尝试将Salome路径('install_path'/appli_V6_5_0p1/bin/salome/)导出到PYTHONPATH和LD_LIBRARY_PATH中,但仍然无法正常工作。
我还想知道是否可以仅使用geompy库而不使用Salome,如果可能的话,如何安装仅geompy库?(我需要在只有8GB内存的UAV上运行一些geompy脚本,所以安装的东西越少越好)
3个回答

5

我和你一样希望实现类似的愿望,但是经过多次搜索,我得出结论,我们想要做的事情并不完全可行。

要在命令行上运行一个没有GUI的salome脚本,请使用以下命令:

salome -t python script.py 或者简单地使用 salome -t script.py

为了运行salome脚本,必须使用salome可执行文件进行调用。似乎不能在不编译程序的情况下使用salome库(通过将它们导入到然后使用python script.py调用的Python脚本)。Salome使用的可执行文件包含平台需要完成其工作的许多内容。

这让我感到沮丧很长时间,但我找到了一个解决方法;例如,如果您有一个salome脚本,可以从另一个Python程序中调用salome可执行文件:

os.system("salome -t python script.py")

但现在你有一个问题;salome不会自动关闭会话,因此如果您多次运行以上命令,系统将被多个正在运行的salome进程堵塞。这些可以通过运行killSalome.py手动关闭,在salome安装文件夹中找到。但是请注意!这将关闭计算机上运行的所有salome实例!如果您同时运行多个模型生成脚本,或者如果您也打开了salome GUI,则会出现问题。

显然,更好的方法是让您的脚本在使用后杀死每个特定的salome实例。以下是一种方法(可执行文件等确切路径将根据您的安装而改变):

# Make a subprocess call to the salome executable and store the used port in a text file:
subprocess.call('/salomedirectory/bin/runAppli -t python script.py --ns-port-log=/absolute/path/salomePort.txt', shell=True)

# Read in the port number from the text file:
port_file = open('/absolute/path/salomePort.txt','r')
killPort = int(port_file.readline())
port_file.close()

# Kill the session with the specified port:
subprocess.call('/salomedirectory/bin/salome/killSalomeWithPort.py %s' % killPort,shell=True)

编辑:修正了Python os命令的拼写错误。

编辑2:最近发现,当端口日志文件(此处为“salomePort.txt”,但可以任意命名)仅给出其相对路径时,使用此方法会遇到问题。似乎必须使用完整的绝对路径才能使其正常工作。


如果我理解正确,这是在尝试在命令窗口运行脚本时用来调用Python脚本的(这些代码行不应包含在脚本本身中,对吗?)。我尝试在命令窗口中运行os.command行,但返回一个错误,说模块"os"没有属性"command"。此外,我尝试运行您最后的10行代码部分(并将第二行中的"python script.py"替换为"python MyScriptName.py"),Python返回一个错误,说没有文件/目录"salomePort.txt"。我是否误解了您的答案? - Johiasburg Frowell
@JohiasburgFrowell,应该是“os.system(...)”,抱歉!我会修复它...关于你的问题: 最后一段代码应该在一个单独的脚本中,如果Python找不到salomePort.txt文件,那么您必须尝试找出它在您的系统上创建的位置,并将其指向正确的路径。 祝你好运! - feedMe
我想我找到了问题所在。当在Python中运行subprocess.call(salome_path -t ....)时,Python立即进入程序的下一步(open('salomePort.txt','r'))。因此,基本上是调用了Salome,而在调用Salome时(尚未定义要保存到文本文件的端口),Python已经在寻找尚不存在的salomePort.txt文件。然而,几秒钟后,Salome确实会保存salomePort.txt文件,但是不及时供open('salomePort.txt', 'r')查找到。 - Johiasburg Frowell
我明白了,可能是这个原因,而且我之前也遇到过类似的问题!虽然这并不是万无一失的解决方法,但一个简单的技巧就是暂停脚本一段时间,比如使用:time.sleep(10) - feedMe
是的,暂停似乎作为临时解决方案可以正常工作。另外一件事,似乎没有杀死调用那个特定实例的Salome。salomePort.txt文件已成功创建,脚本的其余部分似乎正常运行并没有返回任何错误,但是刚刚在salomePort创建的Salome实例在使用后似乎没有被关闭。 - Johiasburg Frowell
显示剩余2条评论

1
根据Salome FAQ
要启动没有GUI的SALOME,请使用“runSalome -t”命令:只启动必要的服务器(不带GUI)。然后,要启动交互式Python控制台(例如,能够加载TUI脚本),您需要使用--pinter选项。
要仅启动选择的模块的Salome:
要启动一组选择的SALOME模块,请使用命令“runSalome --modules=XXX,YYY”,其中XXX和YYY是模块名称。您可以使用-h命令显示runSalome脚本的帮助。

1
如果您在Windows平台上使用Salome,请使用以下方法。
salome_folder\WORK>run_salome.bat -t script_file.py

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接