Go: Run External Python script

心已入冬 提交于 2020-04-11 05:43:06

问题


I have tried following the Go Docs in order to call a python script which just outputs "Hello" from GO, but have failed until now.

exec.Command("script.py")

or I've also tried calling a shell script which simply calls the python script, but also failed:

exec.Command("job.sh")

Any ideas how would I achieve this?

EDIT

I solved following the suggestion in the comments and adding the full path to exec.Command().


回答1:


Did you try adding Run() or Output(), as in:

exec.Command("script.py").Run()
exec.Command("job.sh").Run()

You can see it used in "How to execute a simple Windows DOS command in Golang?" (for Windows, but the same idea applies for Unix)

c := exec.Command("job.sh")

if err := c.Run(); err != nil { 
    fmt.Println("Error: ", err)
}   

Or, with Output() as in "Exec a shell command in Go":

cmd := exec.Command("job.sh")
out, err := cmd.Output()

if err != nil {
    println(err.Error())
    return
}

fmt.Println(string(out))



回答2:


First of all do not forget to make your python script executable (permissions and #!/usr/local/bin/python at the beginning).

After this you can just run something similar to this (notice that it will report you errors and standard output).

package main

import (
    "log"
    "os"
    "os/exec"
)

func main() {
    cmd := exec.Command("script.py")
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    log.Println(cmd.Run())
}



回答3:


Below worked for me on Windows 10

python := path.Clean(strings.Join([]string{os.Getenv("userprofile"), "Anaconda3", "python.exe"}, "/"))
script := "my_script.py"
cmd := exec.Command("cmd", python, script)
out, err := cmd.Output()
fmt.Println(string(out))
if err != nil {
    log.Fatal(err)
}


来源:https://stackoverflow.com/questions/27021517/go-run-external-python-script

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!