如何让Go启动的子进程在自身目录下生成指定文件?
子进程工作目录配置问题解决
问题场景
用Go编写的父进程通过以下代码启动外部exe:
command := exec.Command("C:\\myapplication.exe") if err := command.Run(); err != nil { }
而外部程序myapplication.exe里包含这段代码:
os.Create("generatedfile.txt")
当前的问题是,generatedfile.txt会被创建在父进程的运行目录下,而非子进程exe所在的C:\目录。要求不修改子进程中os.Create的参数,仅调整父进程的启动配置来解决问题。
解决方案
核心是给子进程指定启动后的工作目录,通过设置exec.Cmd的Dir字段即可实现。
修改后的父进程代码如下:
command := exec.Command("C:\\myapplication.exe") // 将子进程的工作目录设置为其自身所在的C:\目录 command.Dir = "C:\\" if err := command.Run(); err != nil { // 可根据需求添加错误处理逻辑,比如打印错误信息 log.Printf("启动子进程出错: %v", err) }
原理说明
exec.Cmd的Dir字段用于定义子进程启动时的当前工作目录。如果不手动设置,子进程会默认继承父进程的工作目录。当我们把Dir设为C:\后,子进程启动后就会以C:\作为当前工作目录,此时子进程里的os.Create("generatedfile.txt")会基于这个目录创建文件,最终生成在C:\generatedfile.txt路径下。
内容的提问来源于stack exchange,提问作者Nisary
相关产品推荐
相关产品推荐

