2018/03/13

UEFI/Windows 的nsh/batch script 如何得到 python 離開的exit code ?

最近研究透過python可以部份取代Windows/UEFI的batch腳本語言, 因為原本的windows的腳本語言不易閱讀, 也不易維持更新, 許多高階程式語言的特性也很缺乏, 例如模組化 modularity, 例外處理, …等! 所以automation如果使用原本預設的windows/uefi的nsh腳本語言, 會有土法煉鋼的感覺, 不夠方便使用

環境1: UEFI介面底下

做產線UEFI自動化測試會透過 nsh file去呼叫執行檔, 這些執行檔會在程式結束給予一個離開的代碼(Exit Code), 而原先的 nsh file裡面再根據這個的 lasterror變數做去判定這執行檔是pass or fail, 所以要導入python到自動化測試流程的話, 要先確定是否可以一樣用 lasterror判定結果

先寫 nsh file

test.nsh 程式碼

Python.efi abc.py #呼叫python codeif not %lasterror% == 3 then    echo Error code is 3.else    echo OK! Others.endif

再寫 python code

abc.py 程式碼
法1: 直接透過 exit(n) 離開

print ('Leave with lasterror 3')exit(3)  

法2: 透過python內建的 sys module的 sys.exit(n)

import sysprint ('Leave with lasterror 3')sys.exit(3)  

然後執行test.nsh , 確認回傳的lasterror是否為3

環境2: Windows介面底下

做產線自動化測試會透過 batch file去呼叫 exe/bat 等執行檔, 這些執行檔會在程式結束給予一個離開的代碼(Exit Code), 而原先的batch file裡面再根據這個的 errorlevel變數做去判定這執行檔是pass or fail, 所以要導入python到自動化測試流程的話, 要先確定是否可以一樣用 errorlevel 判定結果

先寫 batch file

test.bat 程式碼

python abc.py #呼叫python codeecho %errorlevel%

再寫 python code

abc.py 程式碼
法1: 直接透過 exit(n) 離開

print ('Leave with  errorlevel 2')exit(2)  

法2: 透過python內建的 sys module的 sys.exit(n)

import sysprint ('Leave with  errorlevel 2')sys.exit(2)  

然後執行test.bat , 確認回傳的errorlevel是否為2

沒有留言:

張貼留言