如何用Python将计算服务器的结果写入远程存储服务器?
当然有办法搞定这个「算力机干活、存储机存结果」的场景!我给你整理了几种Python里能直接落地的实用方案:
方案1:通过SSH直接远程写入文件(Paramiko库)
如果两台服务器能通过SSH连通,这是最直接的方式。用paramiko库可以在Python里建立SSH连接,直接在远程存储服务器上创建或写入文件。
首先安装依赖:
pip install paramiko
示例代码:
import paramiko # 存储服务器的SSH信息 storage_host = "你的存储服务器IP" storage_port = 22 storage_user = "用户名" storage_password = "密码" # 推荐用密钥登录更安全 # 假设你的计算结果是字符串/字节流 computed_result = "这里是Python代码运行的结果内容\n" try: # 建立SSH连接 ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect(storage_host, port=storage_port, username=storage_user, password=storage_password) # 方式1:直接执行远程写入命令(适合小内容) stdin, stdout, stderr = ssh_client.exec_command(f'echo "{computed_result}" >> /path/to/remote/result.txt') # 方式2:用SFTP文件对象写入(适合大内容,支持流写入) sftp = ssh_client.open_sftp() with sftp.file('/path/to/remote/result.txt', 'a') as remote_file: remote_file.write(computed_result) sftp.close() ssh_client.close() print("结果已成功写入存储服务器!") except Exception as e: print(f"写入失败:{str(e)}")
方案2:用SFTP传输临时文件
如果计算结果是大文件,先在算力服务器上生成一个小临时文件(注意控制大小,别占满1GB空间),再通过SFTP传到存储服务器:
import paramiko import tempfile import os # 先在算力服务器生成临时结果文件 with tempfile.NamedTemporaryFile(mode='w', delete=False) as temp_file: temp_file.write("你的大体积计算结果内容") temp_file_path = temp_file.name # 建立SFTP连接传输文件 ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect(storage_host, port=storage_port, username=storage_user, password=storage_password) sftp = ssh_client.open_sftp() sftp.put(temp_file_path, '/path/to/remote/large_result.txt') # 清理算力服务器上的临时文件 os.unlink(temp_file_path) sftp.close() ssh_client.close()
方案3:挂载远程存储为本地目录(NFS/SMB)
如果两台服务器在同一个可信局域网,可以把存储服务器的磁盘挂载到算力服务器上,这样Python代码就像操作本地文件一样写入,完全不用改业务代码!
Linux环境(NFS):
- 在存储服务器上安装并配置NFS,共享目标目录
- 在算力服务器上挂载共享目录:
sudo mount -t nfs 存储服务器IP:/共享目录路径 /本地挂载点 - Python写入代码:
with open('/本地挂载点/result.txt', 'a') as f: f.write("计算结果内容")
Windows环境(SMB):
- 在存储服务器上共享目标文件夹
- 在算力服务器上映射网络驱动器:
net use Z: \\存储服务器IP\共享文件夹 密码 /user:用户名 - Python直接写入Z盘对应文件即可
方案4:通过Web API写入(适合跨公网场景)
如果两台服务器不在同一网络,甚至是公网环境,可以在存储服务器上跑一个极简Web服务(比如Flask),算力服务器把结果通过HTTP请求发过去,存储服务器负责写入本地文件。
存储服务器端(Flask服务):
from flask import Flask, request app = Flask(__name__) @app.route('/write-result', methods=['POST']) def write_result(): result_content = request.data.decode('utf-8') with open('/path/to/storage/result.txt', 'a') as f: f.write(result_content + '\n') return {"status": "success"} if __name__ == '__main__': # 生产环境建议用gunicorn/uwsgi替代自带服务器 app.run(host='0.0.0.0', port=5000)
算力服务器端(发送请求):
import requests api_url = "http://存储服务器IP:5000/write-result" computed_result = "你的计算结果内容" response = requests.post(api_url, data=computed_result.encode('utf-8')) if response.status_code == 200: print("写入成功!") else: print("写入失败:", response.text)
实用小贴士:
- 确保存储服务器给算力服务器开放了对应端口(SSH的22、NFS的2049、Web服务端口等)
- 权限要到位:算力服务器的用户需要有存储服务器目标目录的写入权限
- 大文件优先用流写入或分块传输,避免占满算力服务器的有限空间
- 敏感信息(密码、密钥)别硬编码,用环境变量或密钥管理工具存储
内容的提问来源于stack exchange,提问作者Feedib Com
相关产品推荐
相关产品推荐

