對於硬體測試應用程序,我必須運行幾個外部 cli 應用程式並與之交互,例如從 Tcl/Tk 腳本內對某個本地 IP 位址進行 Linux ping 操作。
在 Windows 7(以及幾年前的 XP)中,我在 Cygwin 環境中使用 Cygwin 的 Tcl8.5 和 Expect 5.45 執行此操作,取得了良好的成功。我可以產生一個 bash,然後使用 tcl 的 Expect 指令與「ping」、「ls」、「touch」和其他幾個工具進行對話。當我隨後使用「exit」關閉 bash 時,shell 進程完成,我可以根據需要經常使用其他命令重複這個過程。
在 Linux (debianstretch) 中,相同的 tcl/tk 腳本運行起來就像一個魅力,包括與任何外部應用程式的互動。
現在,根據公司政策,我需要讓所有這些在 Windows 10 下運行。 8.5(Windows 版本)和Expect 5.45,透過茶壺。
Tcl 腳本本身按預期運行,包括願望 GUI、串行通信,甚至來自/到 DUT 嵌入式硬體的以太網通信,但我仍然無法啟動並與外部程式對話,例如 ping 和其他一些 Linux cli 應用程序,使用wsl.exe 介面。
如果我透過在Windows 資源管理器中點擊或從(Windows CMD-) 命令shell 手動啟動wsl.exe,我會在虛擬終端中收到bash 提示符,並且可以按預期互動式鍵入所有必需的工具命令。
但無論我嘗試從 Tcl 腳本啟動 wsl.exe,使用(期望)“spawn”命令,甚至簡單地:
執行 C:\\Windows\\system32\\wsl.exe $lnxcmd $params ,
我收到 wsl.exe 的「檔案未找到」或根本沒有回應。
如何執行 wsl.exe 並從 Windows 域中運行的 Tcl 腳本中運行 Linux 程序,“以編程方式”並與其交互(由 Expect 處理 stdin/stdout/stderr)?
即使從 Tcl 解釋器 %-shell 提示字元(tclsh85 或 Wish85)中呼叫「% dir C:\Windows\system32\ws*.exe」也不會顯示任何結果,儘管檔案 WSL.EXE 肯定存在於該 Windows 中系統資料夾?
答案1
但無論我嘗試從 Tcl 腳本啟動 wsl.exe,使用(期望)“spawn”命令,甚至簡單地:
執行 C:\Windows\system32\wsl.exe $lnxcmd $params ,
我收到 wsl.exe 的「檔案未找到」或根本沒有回應。
也許你的路徑是錯的,我不使用 Tcl/tk,但從我在這裡可以讀到的內容:https://www.tcl.tk/man/tcl8.3/TclCmd/filename.htm#M26 你書寫路徑的方式並不是好的方式。
此外,如果你想在 wsl 中拋出 linux 指令,我建議使用 -e 參數:wsl -e ping 192.168.1.1