Golang调用ncftpput无法获取命令输出问题求助
解决Go中捕获ncftpput输出的问题
你的原有代码存在两个关键问题:
- 手动设置了
cmd.Stdout = os.Stdout和cmd.Stderr = os.Stderr,这会把命令输出直接定向到终端,导致Output()/CombinedOutput()无法捕获内容 - 使用
strings.Split()拆分命令字符串存在隐患,如果参数(比如路径)包含空格,会被错误拆分
以下是修正后的代码,同时兼顾输出捕获和参数安全性:
package main import ( "fmt" "os/exec" ) func main() { // 手动构造参数切片,避免路径含空格时的拆分错误 cmd := exec.Command( "ncftpput", "-R", "-f", "C:\\Users\\xx\\source\\go\\depolyment\\cfg\\login.cfg", "/", "C:\\Users\\xx\\source\\go\\depolyment\\cfg", ) // 使用CombinedOutput捕获stdout和stderr的所有输出 output, err := cmd.CombinedOutput() if err != nil { fmt.Printf("命令执行出错: %v\n", err) } // 将字节数组转为字符串用于后续分析 outputStr := string(output) fmt.Println("捕获到的输出内容:") fmt.Println(outputStr) }
额外注意事项:
- 如果ncftpput执行成功时本身没有输出,捕获到的内容会是空字符串,这属于工具自身行为,与Go代码无关
- 确保
ncftpput可执行文件在系统PATH中,或者直接指定其完整路径(比如"C:\\path\\to\\ncftpput.exe")
内容的提问来源于stack exchange,提问作者nil
相关产品推荐
相关产品推荐

