2020年7月24日 星期五

如何取得anstsedt當中 -scriptargs所指定的參數值?

程式開發人員完成自動化程式之後,會將其封裝起來,讓使用者在不需要接觸到程式碼的狀況之下來使用程式,避免使用者無意間錯誤改動代碼。這可以通過兩種方式達到,一是透過GUI,二是透過命令列,或是兩種方式皆支援。像是在AEDT當中,使用者可以雙擊win64目錄底下的ansysedt.exe啟動AEDT環境,也可以透過命令列執行ansysedt.exe並使其在不開啟AEDT環境的狀況下完成建模,模擬與資料處理。

這裡介紹命令列的執行方式。舉個簡單的例子,假設開發者完成了myscript.py提供了使用者。使用者只要開啟命令列視窗並在其中輸入python myscript.py即可。如果需要傳入參數(argument),把參數依序加在myscript.py之後以空白隔開,如python myscript.py arg1, arg2, arg3。myscript.py可以透過sys.argv取得使用者輸入的參數值。以下的範例是將輸入的參數列印到畫面當中,如圖一。

myscript.py程式碼:

import sys
for i in sys.argv:
    print(i)

(圖一) 列印輸入的參數

接下來我們介紹如何在ansysedt執行.py並傳入參數。在命令列執行ansysedt的時候可以指定要執行的.py檔,比方說myscript.py。此時可以透過-scriptargs指定要輸入到.py檔的參數,指令如下,當中"1mm 2mm 3mm"便是要傳送到myscript.py的參數。

命令列視窗指令:

path=%path%;C:\Program Files\AnsysEM\AnsysEM20.2\Win64
ansysedt -scriptargs "1mm 2mm 3mm" -RunScript d:\demo\myscript.py

或是用python程式模擬命令列視窗指令:

import os
os.environ['path']+='%path%;C:\Program Files\AnsysEM\AnsysEM20.2\Win64'
os.system('ansysedt -scriptargs "1mm 2mm 3mm" -RunScript d:\demo\qqq.py')

那麼如何在myscript.py當中讀取到"1mm 2mm 3mm"這一組參數值呢?在myscript.py當中的變數ScriptArgument會接收到"1mm 2mm 3mm"字串,只要將字串分割便可以取出每一個參數值了。底下代碼取得命令列當中的參數,分割之後依序輸出到MessageWindow當中,如圖二。

myscript.py程式碼

for i in ScriptArgument.split():
    AddWarningMessage(i)

(圖二) 取得輸入參數,分割並輸出到訊息視窗


沒有留言:

張貼留言