我对你有类似的愿望,但经过大量搜索,我最终得出结论,我们都想做的事情并不完全可能。
为了在没有 GUI 的情况下在命令行上运行 salome 脚本,请使用
salome -t python script.py
或者干脆
salome -t script.py
为了运行一个 salome 脚本,您必须使用 salome 可执行文件调用它。如果没有已编译的程序,您似乎无法使用 salome 库(通过将它们导入到 python 脚本中,然后使用 调用python script.py
)。salome 使用的可执行文件包含平台完成其工作所需的大部分内容。
这让我很沮丧,但我找到了解决方法;举个简单的例子,如果你有一个 salome 脚本,你可以从另一个 python 程序中调用 salome 可执行文件
os.system("salome -t python script.py")
但是现在你有一个问题;salome 不会自动终止会话,因此如果您多次运行上述命令,您的系统将被多个正在运行的 salome 进程实例堵塞。这些可以通过运行在你的 salome 安装文件夹中找到的 killSalome.py 手动杀死。但要小心!这将杀死您计算机上运行的所有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 命令的错字更正。
EDIT2:我最近发现,当端口日志文件(此处为“salomePort.txt”但可以任意命名)仅给出其相对路径时,会遇到此方法的问题。似乎必须为其提供完整的绝对路径才能使其正常工作。