python调用go程序
时间: 2023-10-04 19:13:45 浏览: 205
Python 调用 Go 程序有多种方式,下面是其中两种常见的方式:
1. 使用 subprocess 模块调用 Go 程序
subprocess 模块可以在 Python 脚本中启动一个子进程,并与该子进程进行交互。可以通过 subprocess 模块启动 Go 程序,并通过管道(pipe)实现 Python 和 Go 之间的数据交换。
以下是一个例子:
```
import subprocess
# 启动 Go 程序,并通过管道与 Python 进行数据交换
proc = subprocess.Popen(['go', 'run', 'path/to/your/go/program.go'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
# 向 Go 程序发送数据
proc.stdin.write(b'hello from Python\n')
proc.stdin.flush()
# 读取 Go 程序的输出
output = proc.stdout.readline().decode('utf-8').rstrip()
print(output)
```
2. 使用 cgo 调用 Go 程序
cgo 是 Go 语言提供的一种 C 语言接口,可以让 Go 调用 C 函数或 C 库。因此,可以使用 cgo 编写一个 Go 程序,将其编译成动态链接库(.so 文件),然后在 Python 中使用 ctypes 模块加载该动态链接库,并调用其中的函数。
以下是一个例子:
首先,编写一个简单的 Go 程序,将其编译成动态链接库:
```
package main
import "C"
import (
"fmt"
)
//export Add
func Add(a, b int) int {
return a + b
}
func main() {
fmt.Println("Go program is running...")
}
```
然后,使用 go build 命令编译该程序成动态链接库:
```
go build -buildmode=c-shared -o libadd.so path/to/your/go/program.go
```
接下来,在 Python 中使用 ctypes 模块加载该动态链接库,并调用其中的函数:
```
import ctypes
# 加载动态链接库
lib = ctypes.cdll.LoadLibrary('./libadd.so')
# 调用 Add 函数
result = lib.Add(1, 2)
print(result)
```
以上就是两种常见的 Python 调用 Go 程序的方式。
阅读全文