Golang Go语言中如何以./proName的方式调用外部程序?os/exec 写蒙了…
请问请问 go 语言以./proName 的方式调用外部程序呢?例如,我想要通过 go 调用 sqluldr2 抽取文件,或者一次执行多个命令,例如 command a;command b;command c 这种方式…
谢谢大家
Golang Go语言中如何以./proName的方式调用外部程序?os/exec 写蒙了…
可以。
更多关于Golang Go语言中如何以./proName的方式调用外部程序?os/exec 写蒙了…的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
没有看懂您的意思,可以麻烦详细解释如何使用./来执行吗?
先付上我自己的理解:Command 第一个参数为 path,实际上是通过$PATH 环境变量进行检索,看第一个参数中的内容是否在$PATH 变量内,如果存在,则视为可执行,如果不存在,会直接返回错误。此参数为必填参数
第二个参数开始,则为 path 所需要的参数,非必填,但是如果填写了,必须是 PATH 的参数
基于这个理解,首先./程序,程序并不一定在$PATH 中,使用 exec.Command(‘程序名’)的方式会报错:未找到 PATH 中有可执行文件。如果将程序加入 path,再执行 exec.Command(‘程序名’),则会提示 exec format error。同时 name 参数中直接输入“./程序名” 也没法进行操作
麻烦您了,谢谢
不用客气。我以前是用绝对路径来做的。
也可以先拿到当前 golang 程序的绝对路径,再拼出要运行的程序的绝对路径。
利用环境变量的没有试过额
直接程序名字就可以了吧,不需要加./
我猜可能楼主和我之前是一个想法,看看这个: https://github.com/nagae-memooff/goutils/blob/master/utils.go
仅供参考,用里头的 Sysexec,就可以像直接在 shell 里敲命令一样的方式直接把字符串传进去了。
执行的时候的环境变量也是你这个 go 用户,在控制台里的时候的环境变量。不过最好用绝对路径,相对路径的比较复杂,三句两句说不清。
比如 Sysexec(history|grep iperf
)这样直接传进去就行。
这个帮了我大忙了,而且还帮我发现了个不小的坑,谢谢啦,哈哈
在Golang中,使用os/exec
包来调用外部程序是非常常见的操作。要以./proName
的方式调用当前目录下的程序,你需要确保程序的执行权限已经设置(例如在Linux/macOS上可以通过chmod +x proName
来设置),然后正确构建并使用exec.Command
函数。
下面是一个简单的例子,展示如何使用os/exec
包以./proName
的方式调用外部程序:
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
// 构建命令,注意使用./proName表示当前目录下的程序
cmd := exec.Command("./proName")
// 获取命令的输出管道
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Printf("执行错误: %s\n", err)
} else {
fmt.Printf("程序输出: %s\n", string(output))
}
// 检查命令的退出状态
if cmd.ProcessState != nil {
fmt.Printf("程序退出状态: %v\n", cmd.ProcessState.ExitCode())
}
}
在这个例子中,exec.Command("./proName")
用于创建一个执行./proName
的命令对象。cmd.CombinedOutput()
会运行这个命令并返回其输出和错误信息(如果有的话)。此外,通过检查cmd.ProcessState.ExitCode()
可以获取程序的退出状态。
确保你的程序proName
是可执行的,并且和Go代码位于同一目录下,这样就可以正确调用了。