我和你一样希望实现类似的愿望,但是经过多次搜索,我得出结论,我们想要做的事情并不完全可行。
要在命令行上运行一个没有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实例。以下是一种方法(可执行文件等确切路径将根据您的安装而改变):
subprocess.call('/salomedirectory/bin/runAppli -t python script.py --ns-port-log=/absolute/path/salomePort.txt', shell=True)
port_file = open('/absolute/path/salomePort.txt','r')
killPort = int(port_file.readline())
port_file.close()
subprocess.call('/salomedirectory/bin/salome/killSalomeWithPort.py %s' % killPort,shell=True)
编辑:修正了Python os命令的拼写错误。
编辑2:最近发现,当端口日志文件(此处为“salomePort.txt”,但可以任意命名)仅给出其相对路径时,使用此方法会遇到问题。似乎必须使用完整的绝对路径才能使其正常工作。
subprocess.call(salome_path -t ....)
时,Python立即进入程序的下一步(open('salomePort.txt','r')
)。因此,基本上是调用了Salome,而在调用Salome时(尚未定义要保存到文本文件的端口),Python已经在寻找尚不存在的salomePort.txt文件。然而,几秒钟后,Salome确实会保存salomePort.txt文件,但是不及时供open('salomePort.txt', 'r')
查找到。 - Johiasburg Frowelltime.sleep(10)
- feedMesalomePort.txt
文件已成功创建,脚本的其余部分似乎正常运行并没有返回任何错误,但是刚刚在salomePort
创建的Salome实例在使用后似乎没有被关闭。 - Johiasburg Frowell