我希望能在GoLang程序中执行二进制文件。
以下是我的代码:
package main
import (
"fmt"
"os/exec"
)
func main() {
output, _ := exec.Command("/home/user/Golang/bin/hello").Output()
fmt.Println(output)
}
但是我得到的输出结果是: []。
提前感谢。
我希望能在GoLang程序中执行二进制文件。
以下是我的代码:
package main
import (
"fmt"
"os/exec"
)
func main() {
output, _ := exec.Command("/home/user/Golang/bin/hello").Output()
fmt.Println(output)
}
我可以获得输出。
package main
import (
"fmt"
"os/exec"
)
func main() {
output, err := exec.Command("/Users/duguying/gopath/bin/test").Output()
if err!=nil {
fmt.Println(err.Error())
}
fmt.Println(string(output))
}
首先请检查您的二进制文件,或者确认二进制文件路径是否正确。尝试打印出您的错误消息。
当我查看 exec.Command()
的源代码时,它不会返回错误,而是仅返回 exe
包中的结构体 Cmd
:
source
....
func Command(name string, arg ...string) *Cmd {
cmd := &Cmd{
Path: name,
Args: append([]string{name}, arg...),
}
if filepath.Base(name) == name {
if lp, err := LookPath(name); err != nil {
cmd.lookPathErr = err
} else {
cmd.Path = lp
}
}
return cmd
}
....
我已经成功地使用以下代码运行了二进制文件:
package main
import (
"fmt"
"os/exec"
)
func main() {
command:= exec.Command("Your binary file path")
// set var to get the output
var out bytes.Buffer
// set the output to our variable
command.Stdout = &out
err = command.Run()
if err != nil {
log.Println(err)
}
fmt.Println(out.String())
}
这个对我来说可行,可以运行一个二进制文件并打印一些随机字符串。
exec
只能使用可执行文件的完整路径。例如,./test.bat
无法工作。 - Somniumerr = command.Run()
改为 err := command.Run()
,以避免出现 undeclared name: err
的错误。 - Sal Prima
Output
返回的错误。同时,使用fmt.Printf("%s\n", output)
将输出作为文本查看。 - Charlie Tumahai