捕获 exec 的输出。

我正在尝试查找 helloworld.java 文件的路径,以便我可以将其传递给编译器函数。


我有什么:


我希望它返回此目录中唯一的helloworld.java文件的[]byte类型,然后将其字符串化,然后将其传递给Java()函数。


filePath, _ := exec.Command("find", "./helloworld/workspace", "-name", "*.java").Output()

                    

Java(string(filePath))

问题是在我的java()函数中无法识别文件路径,因此无法编译它。但是,如果我硬编码我从exec获得的路径。命令(“查找”)如下所示:这工作正常cmd := exec.Command("javac", filePath)


cmd := exec.Command("javac", "./helloworld/workspace/src/main/java/com/coveros/demo/helloworld/HelloWorld.java")

err := cmd.Run()

但这不起作用:


我错过了什么,如何解决这个问题?


func Java(filePath string) {

    fmt.Println("compiler start")

    cmd := exec.Command("javac", filePath)

    err := cmd.Run()


    if err != nil {

        log.Fatal(err)

    }

        fmt.Println("compiler End")

}


ITMISS
浏览 134回答 1
1回答

守着一只汪

我认为结果是返回多个可能的路径,这些路径由换行符分隔。如果将换行符打印到命令行,则换行符将被“隐藏”。您可以尝试这样做以显示其中有一个新行。find"\n"fmt.Println(stringPath + "hello, am I on a new line?")stringPath请参阅下面的内容,其中使用类似版本的 find 查找 json 文件,然后用换行符拆分字符串,然后遍历这些路径。如果路径为空(可以是空白),则会跳过该路径。package mainimport (    "fmt"    "os/exec"    "strings")func main() {    filePath, err := exec.Command("find", ".", "-name", "*.json").Output()    if err != nil {        panic(err)    }    stringPath := string(filePath)    paths := strings.Split(stringPath, "\n")    CatFile(paths)}func CatFile(filePaths []string) {    for _, path := range filePaths {        if len(path) == 0 {            continue        }            output, err := exec.Command("cat", path).Output()        if err != nil {            fmt.Println("Error!")            fmt.Println(err)        }        fmt.Println(string(output))    }}请参阅此相关问题,其中讨论了以下内容:Go lang 区分 “\n” 和换行符
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go