go - cmd.Run() 返回“文件不存在”错误
问题描述
我是 Golang 的新手,但它的明显优势之一是创建命令行工具,所以我认为一个有趣的小学习练习是在 Windows 上重新创建“触摸”命令。我编写了一个程序来在指定的文件路径或当前文件夹中创建一个新文件。这已经非常盛大了,我可以毫无问题地制作一个新文件:
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() failed with error: exec: "code C:\\Go Code\\failed_successfully.go": file does not exist
如果我复制并粘贴"code C:\\Go Code\\failed_successfully.go"
到我的命令提示符中,它会.go
在 VSCode 中毫无问题地打开文件,所以很明显,这个调用有一些东西我错过/不明白。
我想它可能是在创建文件之前尝试打开文件,所以我查找了如何检查文件是否存在,然后使用Tick
s 编写了一个短函数,它每隔几毫秒检查文件是否存在,并在文件存在true
时返回找到它。否则,它会运行指定的秒数,然后返回 false。我仍然遇到同样的错误,所以我假设这不是问题。
我做的最后一件事是strings.Replace()
用正斜杠替换所有反斜杠,这没有效果。
任何关于如何在这里实现我想要的建议都将不胜感激!
解决方案
exec.Command
不解析输入字符串,将其拆分为空格等。相反,将参数单独传递给exec.Command
.
那是:
runCmd := exec.Command("code", full_filepath)
目前,您正在尝试找到一个名为code C:\\Go Code\\failed_successfully.go
-- 而不是简单地调用code
并使用参数调用它的命令。
推荐阅读
- botframework - retrySpeak 属性在机器人中不起作用
- redis - 如何按创建时间排序的redis缓存键列表
- css - 有没有办法将浏览器检查器中的更改同步应用于 CSS 文件?
- javascript - JavaScript - 不能离开 while 循环,为什么?
- react-native - 从接收 ownProps 的组件反应 redux set ownProps
- sql - 仅执行动态查询以获取受影响的行数
- testing - 如何断言 grpc 方法响应体
- visual-studio - Visual Studio 2015 和 2017 的不同设置
- wordpress - kk 星级评分平均值
- node.js - HTTP 标头案例