整合進批次流程
前一頁的 Exit Code 對照表,最主要的用途就是讓別的程式(產線測試流程、CI)自動
判斷這次跑腳本算不算過,不需要人盯著畫面看。這一頁示範怎麼從 .bat 或 Python
呼叫 nexus_tui.exe,並依 Exit Code 分支。
先複習:批次模式怎麼下
nexus_tui.exe --dongle mock --batch --run check_pass_fail.lua--batch 讓程式不開畫面、跑完就結束;--run <路徑> 指定要跑的腳本;--cmd 可以
重複出現,在跑腳本之前依序下好前置指令(例如先選定位址)——腳本若像後面幾頁的
範例一樣自己呼叫 i2c.addr() 之類的函式設定好前置條件,就不需要 --cmd 了。
完整規則見指令參考的「批次模式」一節。
⚠ --dongle mock 只是這篇教學拿來示範用的——它切到模擬後端,讀寫都是假的、
check() 幾乎一定會過。接真實硬體時要把這個參數整個拿掉(或換成真正的
dongle 名稱),不然你測試的其實一直是模擬器,不是你的板子,怎麼跑都是 PASS。
⚠ --cmd 不能拿來下 run——--cmd "run script.lua" 會被拒絕,程式會告訴你
改用 --run script.lua(Exit Code 是 2,見上一頁的 Exit Code 對照表)。這是
刻意的:腳本要跑多久、什麼時候結束,批次模式得知道才能正確等待與回報 Exit
Code,用 --cmd 偷跑一個 run 繞不過這件事。
.bat/Python 檔要存在哪裡、路徑怎麼寫
下面兩支範例都用完整路徑寫 nexus_tui.exe 與腳本檔——理由跟
「第一次跑腳本」一樣,只是這次還多一層:.bat 被雙點兩下執行、
或 CI 系統跑一支腳本時,目前資料夾通常不是 nexus_tui.exe 所在的那個資料夾
(可能是桌面、可能是 CI 系統自己準備的一個暫存目錄)。只寫檔名的話,Windows
可能根本找不到 nexus_tui.exe;就算找到了,--run 後面的腳本路徑也會是相對於
錯誤資料夾去找,一樣容易失敗。完整路徑兩邊都不會出這個問題。
.bat:依 Exit Code 分支
C:\nexus\nexus_tui.exe --dongle mock --batch --run C:\lua\check_pass_fail.lua
if %ERRORLEVEL% EQU 0 (
echo PASS
) else (
echo FAIL, exit code %ERRORLEVEL%, see the log for why
)%ERRORLEVEL% 是上一個程式的 Exit Code;緊接在呼叫之後讀取就好,中間不要插其他
會改變它的指令。
Python:subprocess.run(...).returncode
import subprocess
result = subprocess.run([
r"C:\nexus\nexus_tui.exe", "--dongle", "mock", "--batch",
"--run", r"C:\lua\check_pass_fail.lua",
])
if result.returncode == 0:
print("PASS")
else:
print(f"FAIL, exit code {result.returncode}, see the log for why")subprocess.run(...) 執行完才會回來(不用自己另外等待),.returncode 就是
Exit Code。看到非 0 的 Exit Code,去查那次執行的 Log 找原因,不要預設它可以
靠重跑解決——上一頁的 Exit Code 對照表已經說過,1 除了語法錯誤,也會是裝置
真的沒回應這種重跑一百次結果都一樣的情況。
接下來
下一頁介紹 record:不想手寫腳本時,可以先手動操作一遍,讓程式幫你錄成 Lua 腳本。
再下一頁是 gpio.* 與 uart.*:gpio.* 在模擬後端就能跑,uart.* 則需要接上
真實硬體才有東西可以互動。