在 CentOS 上实现 Python 远程调用,常见有几种方式,按使用场景从简单到专业给你梳理一下:
paramiko(Python SSH 库)适合:脚本自动远程执行命令
安装
pip install paramiko
示例
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.100', username='root', password='password')
stdin, stdout, stderr = ssh.exec_command('python3 test.py')
print(stdout.read().decode())
ssh.close()
✅ 优点:无需额外服务
❌ 缺点:只能执行命令,不是函数级调用
fabric(基于 paramiko)适合:批量服务器操作
pip install fabric
from fabric import Connection
c = Connection('root@192.168.1.100')
result = c.run('python3 test.py', hide=True)
print(result.stdout)
xmlrpc(Python 内置)适合:简单内部服务
服务端(CentOS)
from xmlrpc.server import SimpleXMLRPCServer
def add(a, b):
return a + b
server = SimpleXMLRPCServer(("0.0.0.0", 8000))
server.register_function(add, "add")
server.serve_forever()
客户端
import xmlrpc.client
s = xmlrpc.client.ServerProxy("http://192.168.1.100:8000")
print(s.add(1, 2))
⚠️ 注意防火墙:
firewall-cmd --add-port=8000/tcp --permanent
firewall-cmd --reload
grpc(生产级推荐)适合:高性能、跨语言
pip install grpcio grpcio-tools
需要定义 .proto 文件(稍复杂,但最规范)
适合:Web 服务、跨语言
CentOS 服务端
pip install fastapi uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/add")
def add(a: int, b: int):
return {"result": a + b}
uvicorn main:app --host 0.0.0.0 --port 8000
远程调用
import requests
r = requests.get("http://192.168.1.100:8000/add?a=1&b=2")
print(r.json())
✅ 最灵活
✅ 可被任意语言调用
适合:任务队列、分布式系统
pip install celery redis
| 场景 | 推荐方式 |
|---|---|
| 执行命令 | paramiko / fabric |
| 简单函数调用 | xmlrpc |
| Web / 跨语言 | FastAPI |
| 高性能服务 | gRPC |
| 异步任务 | Celery |
如果你能说清楚:
我可以直接给你一套完整方案(含防火墙、systemd 服务)。