从Go运行Python程序
我用Python编写了一些代码,使用了一些不在Go中的库。我有一个用Go编写的web服务器,我希望能够从Go程序调用Python程序,然后将Python程序的输出作为Go程序的输入。有什么方法可以做到这一点吗?实际上相对容易。您只需使用从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
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,是的,我曾经看过其中一些,但像这样运行代码似乎是个更好的主意。至少与其他方法不同,此方法受支持。