我對你有類似的願望,但經過很多搜索,我最終得出結論,我們都想要要做並不完全可能。
爲了不GUI使用
salome -t python script.py
或者乾脆 salome -t script.py
運行命令行上莎樂美的腳本爲了運行一個腳本,莎樂美,你必須使用莎樂美可執行文件調用它。看起來你不能使用salome庫(通過將它們導入到一個python腳本,然後調用python script.py
)而不用編譯的程序。 Salome使用的可執行文件包含了平臺需要完成其工作的大部分內容。
這使我很長時間感到沮喪,但我找到了解決辦法;舉一個簡單的例子,如果你有一個salome腳本,你可以從另一個python程序中調用salome可執行文件 os.system("salome -t python script.py")
但是現在你有一個問題; salome不會自動終止會話,所以如果您運行上述命令,系統將會多次被運行salome進程的多個實例阻塞。可以通過運行salome安裝文件夾中的killSalome.py手動殺死這些文件。但要小心!這將殺死全部在您的計算機上運行的salome實例!如果你正在運行多個模型生成腳本一次,或者如果你也有莎樂美GUI開放這將是一個問題。
顯然,更好的方法是人們已經習慣後你的腳本殺莎樂美的每一個具體的實例。下面是一個方法(可執行等的確切路徑將需要根據安裝改變):
# 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)
編輯:錯字校正蟒操作系統命令。
EDIT2:我最近發現,用這種方法的問題只與它的相對路徑給出的滿足,當端口日誌文件(這裏「salomePort.txt」,但可以任意命名)。看起來,給它的完整,絕對路徑是必然的。
如果我理解正確,當試圖在命令窗口中運行腳本時,這將用於調用python腳本(這些代碼行不會包含在腳本本身中,對嗎?)。我嘗試在命令窗口中運行os.command行,並返回一個錯誤消息,說模塊「os」沒有屬性「命令」。另外,我嘗試運行最後10行代碼(並在第二行用「python MyScriptName.py」替換了「python script.py」),並且Python返回一個錯誤,表示沒有文件/目錄「salomePort.txt 」。我誤解了你的答案嗎? –
@JohiasburgFrowell它應該說「os.system(...)」,對不起!我會修復它......並且考慮到你的問題: 最後一段代碼應該放在一個單獨的腳本中,如果python找不到salomePort.txt文件,那麼你必須嘗試確定它在系統上的創建位置並將其引導至正確的路徑。 祝你好運! – feedMe
嗯......我試着在第一個'subprocess.call()'行之前使用'os.chdir('C:\\ Users \\ Me \\ Desktop')'(應該將salomePort.txt文件指向在桌面上創建,是否正確?),並且它沒有出現在桌面上,並且出現了與沒有名爲salomePort.txt的文件/目錄相同的錯誤。然而,第一個命令('subprocess.call(...)')確實運行。 –