gpt4 book ai didi

python - 如何将字符串写入远程机器上的文件?

转载 作者:太空狗 更新时间:2023-10-29 18:20:28 24 4
gpt4 key购买 nike

在 Machine1 上,我有一个 Python2.7 脚本,它在 RAM 中计算一个大的(最多 10MB)二进制字符串,我想将它写入 Machine2 上的磁盘文件,这是一台远程机器。做这个的最好方式是什么?

约束:

  • 两台机器都是 Ubuntu 13.04。他们之间的连接很快——他们在同一个网络上。

  • Machine2 上可能尚不存在目标目录,因此可能需要创建它。

  • 如果容易的话,我想避免将字符串从 RAM 写入 Machine1 上的临时磁盘文件。这是否消除了可能使用 rsync 系统调用的解决方案?

  • 因为字符串是二进制的,它可能包含可以被解释为换行符的字节。这似乎排除了可能使用对 Machine2 上 echo 命令的系统调用的解决方案。

  • 我希望它在 Machine2 上尽可能轻量级。因此,我想避免在 Machine2 上运行 ftp 之类的服务或在那里进行其他配置事件。另外,我不太了解安全性,因此除非真正必要,否则我希望避免打开额外的端口。

  • 我在 Machine1 和 Machine2 上设置了 ssh key ,并想使用它们进行身份验证。

  • 编辑:Machine1 正在运行多个线程,因此多个线程可能会在重叠时间尝试写入 Machine2 上的同一文件。在这种情况下,我不介意将文件写入两次(或更多次)导致效率低下,但 Machine2 上生成的数据文件不应因同时写入而损坏。也许需要在 Machine2 上锁定操作系统?

我支持 rsync 解决方案,因为它是一个我相当了解的独立实体,并且不需要在 Machine2 上进行配置。

最佳答案

Paramiko支持在远程机器上打开文件:

import paramiko

def put_file(machinename, username, dirname, filename, data):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(machinename, username=username)
sftp = ssh.open_sftp()
try:
sftp.mkdir(dirname)
except IOError:
pass
f = sftp.open(dirname + '/' + filename, 'w')
f.write(data)
f.close()
ssh.close()


data = 'This is arbitrary data\n'.encode('ascii')
put_file('v13', 'rob', '/tmp/dir', 'file.bin', data)

关于python - 如何将字符串写入远程机器上的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19202314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com