命令提示符我啓動命令提示符: eval exec [auto_execok start] &
控制窗口通過TCL
它返回我的PID,並啓動命令提示符。 我可以控制啓動的shell嗎?或者還有其他方法。
現在我喜歡在推出的時間發送命令: eval exec [auto_execok start] "cd Desktop" &
但我想控制進一步的操作外殼。
命令提示符我啓動命令提示符: eval exec [auto_execok start] &
控制窗口通過TCL
它返回我的PID,並啓動命令提示符。 我可以控制啓動的shell嗎?或者還有其他方法。
現在我喜歡在推出的時間發送命令: eval exec [auto_execok start] "cd Desktop" &
但我想控制進一步的操作外殼。
您無法控制以任何方式啓動的任何內容(除了您可以對pid執行的任何操作外);它特別要求最終沒有控制&
。
某些程序在作爲管道啓動時可以稍微控制。
set pipeline [open |cmd "r+"]
fconfigure $pipeline -buffering line -blocking 0
puts $pipeline "dir"
while {![fblocked $pipeline]} {
set line [gets $pipeline]
puts "I have read: $line"
}
更多的控制可以通過Expect,一個擴展包來完成。
但是,命令提示符窗口不能由任何一種機制控制;大多數打開Windows的程序都不能。
我沒有使用「&」b'coz我沒有收到tcl提示符。 – Dcode
是的。對於沒有'&'的'exec',Tcl在繼續之前等待子進程完成。使用終端提示符,可能需要一些時間! –
我懷疑你試圖重新創建批處理文件的困難。
如果需要使用cmd.exe
執行一系列任務,產卵它使用
set cmd [open |cmd.exe "r+"]
,然後簡單地編寫批處理腳本,該流:
puts $cmd $myscript
爲了解釋:彈(Tcl的擁有tclsh
和wish
)通常有兩種執行模式:交互式和非交互式。當shell以「原樣」啓動時啓用fisrt,當它在管道中啓動時第二個— 。在交互模式下,shell將顯示其提示並交互地接受命令—。 在非交互模式下,它只會讀取其standard input stream上的命令並在讀取它們時執行它們。 Windows的cmd.exe
也不例外,所以您可以在open |cmd.exe
它以「讀/寫」模式(r+
)並將其批處理命令語言編寫的腳本寫入其標準輸入流中,該流將綁定到流對象open
返回。
如果一個進程開始open
或exec
寫入任何東西到其標準錯誤流和/或與非零退出代碼退出,這些命令將引發一個異常(即錯誤處理主要是覆蓋了你)。
好,適用於Windows,這是很難界定什麼是「互動」與「非交互式」的意思,但它有點不相干手頭上的問題。
您應該使用'Expect'進行交互式CLI會話。 – Dinesh