登录
首页 >  Golang >  Go问答

cmd.Run() 引发了“文件不存在”错误

来源:stackoverflow

时间:2024-02-13 11:24:26 114浏览 收藏

大家好,我们又见面了啊~本文《cmd.Run() 引发了“文件不存在”错误》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我是 golang 的新手,但它的明显优势之一是创建命令行工具,因此我认为一个有趣的小学习练习是在 windows 上重新创建“touch”命令。我编写了一个程序来在指定的文件路径或当前文件夹中创建新文件。这绝对是伟大的,我可以毫无问题地创建一个新文件:

func create_empty_file(file_name string) bool {
    filehandle, err := os.create(file_name)

    if err != nil {
        return false
    }

    defer filehandle.close()

    return true
}

我知道这部分正在工作,因为我可以观看正在制作的文件并在程序完成后打开它。我的问题是,我想在创建后在 vscode 中打开这个文件,并且显然有一些关于 os/exec 的内容我不明白。当我尝试运行此命令时:

command_string := strings.Join([]string{"code", full_filepath}, " ")
run_command := exec.Command(command_string)
run_err := run_command.Run()

然后我打印出 run_err 的内容(显然事先检查了 nil),我得到了:

.run() 失败,错误:exec: "code c:\\go code\\failed_successively.go": 文件不存在

如果我将 "code c:\\go code\\failed_successively.go" 复制并粘贴到我的命令提示符中,它会在 vscode 中打开 .go 文件,不会出现问题,所以显然这个调用有一些问题我失踪/不明白。

我想它可能是在创建文件之前尝试打开文件,所以我查找了如何检查文件是否存在,然后使用 ticks 编写了一个简短的函数,该函数每隔几个检查一次如果文件尚存在,则返回毫秒,并在找到它时返回 true。否则,它会运行指定的秒数,然后返回 false。我仍然遇到同样的错误,所以我假设这不是问题所在。

我做的最后一件事是使用 strings.replace() 将所有反斜杠替换为正斜杠,但这没有任何效果。

任何有关如何实现我想要的目标的建议将不胜感激!


正确答案


exec.command 不会解析输入字符串,将其分割为空格等。相反,将参数单独传递给 exec.command

即:

runCmd := exec.Command("code", full_filepath)

当前,您正在尝试查找名为 code c:\\go code\\failed_successively.go 的命令,而不是简单地名为 code 并使用参数调用它的命令。

以上就是《cmd.Run() 引发了“文件不存在”错误》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>