Skip to Content
Lua 自動化整合進批次流程

整合進批次流程

前一頁的 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.* 則需要接上 真實硬體才有東西可以互動。