網站首頁 編程語言 正文
1. Golang執行系統命令使用 os/exec Command方法:
func Command(name string, arg ...string) *Cmd
第一個參數是命令名稱,后面參數可以有多個命令參數。
cmd := exec.Command("ls", "-a") if stdout, err := cmd.StdoutPipe(); err != nil { ? ? //獲取輸出對象,可以從該對象中讀取輸出結果 ? ? log.Fatal(err) } defer stdout.Close() ? // 保證關閉輸出流 if err := cmd.Start(); err != nil { ? // 運行命令 ? ? log.Fatal(err) } if opBytes, err := ioutil.ReadAll(stdout); err != nil { ?// 讀取輸出結果 ? ? ? ? log.Fatal(err) } else { ? ? log.Println(string(opBytes)) }
2. ?將命令的輸出結果重定向到文件中:?
stdout, err := os.OpenFile("stdout.log", os.O_CREATE|os.O_WRONLY, 0600) ?? ? ? if err != nil { ? ? ? ? log.Fatalln(err) ? ? } ? ? defer stdout.Close() ? ? cmd.Stdout = stdout ? // 重定向標準輸出到文件 ? ? // 執行命令 ? ? if err := cmd.Start(); err != nil { ? ? ? ? log.Println(err) ? ? }
3. cmd的Start和Run方法的區別:?
Start執行不會等待命令完成,Run會阻塞等待命令完成。
cmd := exec.Command("sleep", "10") err := cmd.Run() ?//執行到此處時會阻塞等待10秒 err := cmd.Start() ? //如果用start則直接向后運行 if err != nil { ? ? log.Fatal(err) } err = cmd.Wait() ? //執行Start會在此處等待10秒
4. 如果命令名稱和參數寫成一個字符串傳給Command方法,可能會執行失敗報錯:file does not exist,但此時如果按以下方式強行啟動一個DOS窗口(windows平臺)進行執行,也是成功的。
在Windows平臺,強行彈出DOS窗口執行命令行:?
cmdLine := pscp -pw pwd local_filename user@host:/home/workspace cmd := exec.Command("cmd.exe", "/c", "start " + cmdLine) err := cmd.Run() fmt.Printf("%s, error:%v \n", cmdLine, err)
5. 運行時隱藏golang程序自己的cmd窗口:
go build -ldflags -H=windowsgui
6. Windows平臺上,執行系統命令隱藏cmd窗口:
cmd := exec.Command("sth") if runtime.GOOS == "windows" { cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} } err := cmd.Run()
原文鏈接:https://blog.csdn.net/youngwhz1/article/details/88662172
相關推薦
- 2022-08-05 HttpUtil發送外部請求包工具類
- 2022-08-30 如何解決React?useEffect鉤子帶來的無限循環問題_React
- 2022-11-10 詳解C++?左值引用與?const?關鍵字_C 語言
- 2022-08-24 python多線程死鎖現象及解決方法_python
- 2022-09-30 python實現圖像降噪_python
- 2022-01-31 element-ui upload組件 上傳文件類型限制
- 2022-04-26 Python?Socket?編程知識點詳細介紹_python
- 2022-04-12 如何解決:git push -u origin msster時出現error: failed to
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支