// exec基礎使用 import ( "os/exec" ) cmd = exec.Command("C:\\cygwin64\\bin\\bash.exe", "-c", "echo 1") err = cmd.Run()
// 捕獲輸出 cmd = exec.Command("C:\\cygwin64\\bin\\bash.exe", "-c", "/usr/bin/python xxx.py") output, err = cmd.CombinedOutput() // 執行了命令, 捕獲了子進程的輸出(pipe) fmt.Println(string(output))
// 1s超時後,kill程序(強制終止/超時終止) func main() { // 執行1個cmd, 讓它在一個協程裏去執行, 讓它執行2秒: sleep 2; echo hello; // 1秒的時候, 咱們殺死cmd var ( ctx context.Context cancelFunc context.CancelFunc cmd *exec.Cmd resultChan chan *result res *result ) // 建立了一個結果隊列 resultChan = make(chan *result, 1000) // context: chan byte // cancelFunc: close(chan byte) ctx, cancelFunc = context.WithCancel(context.TODO()) go func() { var ( output []byte err error ) cmd = exec.CommandContext(ctx, "bash", "-c", "sleep 2;echo hello;") // 執行任務, 捕獲輸出 output, err = cmd.CombinedOutput() // 把任務輸出結果, 傳給main協程 resultChan <- &result{ err: err, output: output, } }() // 繼續往下走 time.Sleep(1 * time.Second) // 取消上下文 cancelFunc() // 在main協程裏, 等待子協程的退出,並打印任務執行結果 res = <- resultChan // 打印任務執行結果 fmt.Println(res.err, string(res.output)) }