4 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
os/exec包幫助你在 Go 中執(zhí)行終端命令。
執(zhí)行系統(tǒng)命令非常簡單。Cmd 保存您的外部命令。
所以在 linux 中假設(shè)你想運(yùn)行“echo hello”命令,你會(huì)寫下面的代碼。
cmdStruct := exec.Command("echo","hello")
out,err := cmdStruct.Output()
if err != nil {
fmt.Println(err)
}
fmt.Println(string(out))
這是最基本的方法之一。但是,在 Windows 中,您需要將“echo hello”作為參數(shù)傳遞給命令提示符或 Powershell。
cmdStruct:= exec.Command("cmd.exe","/c","echo","hello")
為了簡化單個(gè)切片中的傳遞參數(shù),
args:= strings.Split("/c echo hello there how are you"," ")
cmdStruct:= exec.Command("cmd.exe",args...)
查看此答案以獲得更好的理解和此代碼的增強(qiáng)版本。
對于 cd,您可以使用os.Chdir()和os.Getwd()分別更改和查看您的工作目錄。但是如果你需要你的命令在特定目錄中執(zhí)行,你可以設(shè)置Dir你的命令,即
cmdStruct.Dir = "path/to/directory"
或者
cmdStruct.Dir = filepath.Join("path","to","directory")

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
cd 不是外部程序。
命令行解釋器有一個(gè)抽象“當(dāng)前目錄”,它影響所有其他命令。它是一個(gè)狀態(tài)
例如,它用于處理相對路徑。
如果您想從頭開始創(chuàng)建 CLI,則必須定義此階段如何影響一切。
如果您需要與現(xiàn)有 CLI 進(jìn)行交互,則需要在操作系統(tǒng)進(jìn)程中啟動(dòng)它并通過流進(jìn)行交互。
有3個(gè)流:
STDIN - 輸入 STDOUT - 輸出 STDERR - 錯(cuò)誤
您需要捕獲用戶命令并發(fā)送到 CLI 的 STDIN。并讀取 STDIN / STDOUT 以寫入響應(yīng)。
例如,這與 goroutines 有關(guān)

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
盡管我問這個(gè)問題已經(jīng)有一段時(shí)間了,但我認(rèn)為回答這個(gè)問題會(huì)很好。簡單來說,沒有辦法。程序基本上在它們自己的小盒子上運(yùn)行,這意味著雖然 os.Chdir() 確實(shí)在技術(shù)上改變了工作目錄,但它之后“恢復(fù)”。
- 4 回答
- 0 關(guān)注
- 217 瀏覽
添加回答
舉報(bào)