Golang exec:stat:文件被移动到那里后没有这样的文件或目录
Posted
技术标签:
【中文标题】Golang exec:stat:文件被移动到那里后没有这样的文件或目录【英文标题】:Golang exec: stat: no such file or directory after file has been moved there 【发布时间】:2013-12-31 03:12:14 【问题描述】:我有一个使用“os/exec”包进行部署的脚本。我使用的命令之一如下:
cpInit = exec.Command("cp", "initScripts/nginx", "/etc/init.d/nginx")
还有一个:
startNginx = exec.Command("/etc/init.d/nginx", "start")
最初我使用err := cpInit.Run()
运行第一个命令,但后来当我运行第二个命令时出现错误:
exec: "/etc/init.d/nginx": stat /etc/init.d/nginx: no such file or directory
但是当程序退出时/etc/init.d/nginx
就在那里,所以我想也许第一个命令没有完成(即使Run()
等到命令返回)。我将Run()
更改为Start()
和Wait()
只是为了得到相同的结果。谁能告诉我为什么第二个命令找不到那个文件?
【问题讨论】:
【参考方案1】:当您运行exec.Command(...)
时,它会立即检查文件是否存在,但必须将错误推迟到您调用Run()
,因为Command()
调用不会返回错误。
Command
的定义见这里:http://golang.org/src/pkg/os/exec/exec.go?s=3410:3455#L99
它调用这里定义的LookPath(...)
:http://golang.org/src/pkg/os/exec/lp_unix.go?s=902:944#L23
您需要在知道文件存在后初始化Command
- 在您的复制命令上调用Run()
之后。
【讨论】:
以上是关于Golang exec:stat:文件被移动到那里后没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
详解Linux——find命令(stat+exec+xargs+dd命令)
SQL sys.dm_exec_query_stats Last_Elapsed_Time 废话
golang 在golang中管道exec.Cmd(示例按其扩展名对目录下的所有常规文件进行排序)