代码之家  ›  专栏  ›  技术社区  ›  Sebastián Grignoli

执行运行-这个围棋程序怎么了?

go
  •  2
  • Sebastián Grignoli  · 技术社区  · 15 年前

    这个Golang程序不是应该输出一个目录列表到stdout吗?

    package main
    
    import "exec"
    
    func main() {
      argv := []string{"-la"}
      envv := []string{}
      exec.Run("ls", argv, envv, "", exec.DevNull, exec.PassThrough, exec.MergeWithStdout)
    }
    
    4 回复  |  直到 8 年前
        1
  •  4
  •   newacct    15 年前

    这样做有效:

    package main
    import "exec"
    
    func main() {
      cmd, err := exec.Run("/bin/ls", []string{"/bin/ls", "-la"}, []string{}, "", exec.DevNull, exec.PassThrough, exec.PassThrough)
      if (err != nil) {
        return
      }
      cmd.Close()
    }
    
        2
  •  2
  •   yanatan16    13 年前

    您也可以在本机围棋中使用: ioutil.ReadDir(dir) ,就像这样:

    //listdir.go
    package main
    
    import (
        "os"
        "io/ioutil"
        "fmt"
    )
    
    func ListDir(dir string) ([]os.FileInfo, error) {
        return ioutil.ReadDir(dir)
    }
    
    func main() {
        dir := "./"
        if len(os.Args) > 1 {
            dir = os.Args[1]
        }
        fi, err := ListDir(dir)
        if err != nil {
            fmt.Println("Error", err)
        }
    
        for _, f := range fi {
            d := "-"
            if f.IsDir() { d = "d" }
            fmt.Printf("%s %o %d %s %s\n", d, f.Mode() & 0777, f.Size(), f.ModTime().Format("Jan 2 15:04"), f.Name())
        }
    }
    

    ioutil os 包装。

        3
  •  1
  •   djm    11 年前

    默认情况下执行命令将标准输入、输出和错误连接到/dev/null。因此,您的'ls'命令运行良好,但输出被丢弃了。如果您添加:

    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    

    在执行运行调用,然后您的输出将到达您可能期望的位置。

        4
  •  -1
  •   Jorenko    15 年前