从Go运行Python程序

从Go运行Python程序,python,go,cross-platform,Python,Go,Cross Platform,我用Python编写了一些代码,使用了一些不在Go中的库。我有一个用Go编写的web服务器,我希望能够从Go程序调用Python程序,然后将Python程序的输出作为Go程序的输入。有什么方法可以做到这一点吗?实际上相对容易。您只需使用os/exec库即可。下面是一个例子 Go代码: package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("python", "python.py

我用Python编写了一些代码,使用了一些不在Go中的库。我有一个用Go编写的web服务器,我希望能够从Go程序调用Python程序,然后将Python程序的输出作为Go程序的输入。有什么方法可以做到这一点吗?

实际上相对容易。您只需使用
os/exec
库即可。下面是一个例子

Go代码:

package main

import (
   "fmt"
   "os/exec"
)

func main() {
    cmd := exec.Command("python",  "python.py", "foo", "bar")
    fmt.Println(cmd.Args)
    out, err := cmd.CombinedOutput()
    if err != nil { fmt.Println(err); }
    fmt.Println(string(out))
}
import sys

for i in range(len(sys.argv)):
   print str(i) + ": " + sys.argv[i]
[python python.py foo bar]
0: python.py
1: foo
2: bar
Python代码:

package main

import (
   "fmt"
   "os/exec"
)

func main() {
    cmd := exec.Command("python",  "python.py", "foo", "bar")
    fmt.Println(cmd.Args)
    out, err := cmd.CombinedOutput()
    if err != nil { fmt.Println(err); }
    fmt.Println(string(out))
}
import sys

for i in range(len(sys.argv)):
   print str(i) + ": " + sys.argv[i]
[python python.py foo bar]
0: python.py
1: foo
2: bar
Go代码的输出:

package main

import (
   "fmt"
   "os/exec"
)

func main() {
    cmd := exec.Command("python",  "python.py", "foo", "bar")
    fmt.Println(cmd.Args)
    out, err := cmd.CombinedOutput()
    if err != nil { fmt.Println(err); }
    fmt.Println(string(out))
}
import sys

for i in range(len(sys.argv)):
   print str(i) + ": " + sys.argv[i]
[python python.py foo bar]
0: python.py
1: foo
2: bar

还有一些Python/Cgo桥接器使用Cython(因此您不必每次都重新启动解释器),但它们看起来被放弃了。@Jsor,是的,我曾经看过其中一些,但像这样运行代码似乎是个更好的主意。至少与其他方法不同,此方法受支持。