执行任何命令比如l s突然报错ioutil.ReadAll error read |0: file already closed

weixin_38062058 2019-09-20 10:27:48
执行任何命令突然报错ioutil.ReadAll error read |0: file already closed


...全文
438 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38074560 2019-09-20
  • 打赏
  • 举报
回复
1.cmd := exec.Command("/bin/sh/", "-c", "linux命令") 2.cmd := exec.Command("cmd", "/C", "windows命令") 如果想执行windows下命令行的话,应该用2而不是1.
weixin_38089340 2019-09-20
  • 打赏
  • 举报
回复
cmd.wait()
weixin_38103983 2019-09-20
  • 打赏
  • 举报
回复
因为命令没有正确识别,所以out读取不到内容 使用 cmd.Start()的可以通过返回值来查看 命令是否可以执行,之后的流程就对了 ```go package main import ( "fmt" "io" _ "io/ioutil" "os" "os/exec" "bytes" ) func main() { cmd_os := "" if "windows" == os.Getenv("GOOS") { cmd_os = "dir" }else{ cmd_os = "ls" } cmd := exec.Command(cmd_os) out ,err := cmd.StdoutPipe() if err!=nil{ fmt.Println(err) } var errbuf bytes.Buffer cmd.Stderr = &errbuf err = cmd.Start() if err!=nil{ io.Copy(cmd.Stderr,bytes.NewBufferString(err.Error())) //fmt.Println(err) } //cont,err:= ioutil.ReadAll(out) _,err = io.Copy(os.Stdout,out) if err!=nil{ //fmt.Println(err) } //io.Copy(os.Stdout,out) cmd.Wait() // fmt.Println(bytes.NewBuffer(cont).String()) fmt.Println(errbuf.String()) //io.Copy(os.Stdout,cmd.Stderr) //io.Copy(os.Stdout,os.Stdin) //fmt.Println(os.Args[1]) } ```

473

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧