How to write a string to a file on a remote machine?(如何将字符串写入远程计算机上的文件?)
问题描述
在Machine1上,我有一个Python2.7脚本,该脚本在RAM中计算一个很大(最大10MB)的二进制字符串,我希望将该字符串写入到Machine2上的磁盘文件中,Machine2是一台远程计算机。执行此操作的最佳方式是什么?
约束:
这两台机器都是Ubuntu13.04。它们之间的连接速度很快--它们位于同一网络上。
目标目录可能在Machine2上尚不存在,因此可能需要创建它。
如果很容易,我希望避免将字符串从RAM写入Machine1上的临时磁盘文件。这是否消除了可能使用系统调用进行rsync的解决方案?
因为字符串是二进制的,所以它可能包含可以解释为换行符的字节。这似乎排除了可能对Machine2上的echo命令使用系统调用的解决方案。
我希望它在Machine2上尽可能轻量级。因此,我希望避免在Machine2上运行ftp之类的服务或在那里进行其他配置活动。另外,我不太了解安全,因此除非确实有必要,否则希望避免打开额外的端口。
我在Machine1和Machine2上设置了ssh密钥,并且要使用它们进行身份验证。
编辑:Machine1正在运行多个线程,因此可能会有多个线程尝试在重叠时间写入Machine2上的同一文件。我并不介意在这种情况下将文件写入两次(或更多次)会导致效率低下,但是在Machine2上产生的数据文件不应该因同时写入而损坏。是否需要计算机2上的操作系统锁?
我支持rsync解决方案,因为它是一个我非常了解的独立实体,不需要在Machine2上进行配置。
SSH
您使用subprocess.Popen向Machine2打开一个新的推荐答案进程,然后将数据写入其STDIN。
import subprocess
cmd = ['ssh', 'user@machine2',
'mkdir -p output/dir; cat - > output/dir/file.dat']
p = subprocess.Popen(cmd, stdin=subprocess.PIPE)
your_inmem_data = 'foobarbaz ' * 1024 * 1024
for chunk_ix in range(0, len(your_inmem_data), 1024):
chunk = your_inmem_data[chunk_ix:chunk_ix + 1024]
p.stdin.write(chunk)
我刚刚验证它是否如播发的那样工作,并复制所有的10485760个虚拟字节。
P.S.一个可能更干净/更优雅的解决方案是让Python程序将其输出写入sys.stdout,然后将管道传输到ssh外部:
$ python process.py | ssh <the same ssh command>
这篇关于如何将字符串写入远程计算机上的文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何将字符串写入远程计算机上的文件?
基础教程推荐
- Python,确定字符串是否应转换为 Int 或 Float 2022-01-01
- matplotlib 设置 yaxis 标签大小 2022-01-01
- Kivy 使用 opencv.调整图像大小 2022-01-01
- 究竟什么是“容器"?在蟒蛇?(以及所有的 python 容器类型是什么?) 2022-01-01
- 对多索引数据帧的列进行排序 2022-01-01
- 在 Python 中将货币解析为数字 2022-01-01
- 比较两个文本文件以找出差异并将它们输出到新的文本文件 2022-01-01
- Python 中是否有任何支持将长字符串转储为块文字或折叠块的 yaml 库? 2022-01-01
- 在 Django Admin 中使用内联 OneToOneField 2022-01-01
- kivy 应用程序中的一个简单网页作为小部件 2022-01-01
