使用 python 子进程和 ssh 读取远程文件?

发布于 2024-12-01 03:29:39 字数 32 浏览 0 评论 0原文

如何使用子进程和 ssh 从大型远程文件读取数据?

How can I read data from a big remote file using subprocess and ssh?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夏末 2024-12-08 03:29:39
import subprocess
ssh = subprocess.Popen(['ssh', 'user@host', 'cat', 'path/to/file'],
                       stdout=subprocess.PIPE)
for line in ssh.stdout:
    line  # do stuff
import subprocess
ssh = subprocess.Popen(['ssh', 'user@host', 'cat', 'path/to/file'],
                       stdout=subprocess.PIPE)
for line in ssh.stdout:
    line  # do stuff
十二 2024-12-08 03:29:39

上面的答案是可行的,但你必须将 ssh 登录设置为在你的盒子之间不使用密码。还有其他方法可以使用 Python 在计算机之间传输文件。一种无需身份验证的简单方法是设置 apache 服务器并使用 http 请求

The answer above will work, but you'll have to setup your ssh login to use no password between your boxes. There are other ways to transfer files between computers using Python. A simple way, without authentication is to setup an apache server and use an http request.

抽个烟儿 2024-12-08 03:29:39

为了提高性能(当文件很大时这很重要),有 rsync。有关确切改进的更多信息,请参阅以下帖子和 Rafa 的回答:
`scp` 与 `rsync` 有何不同?

该算法将是以下使用 rsync

import subprocess

subprocess.Popen(["rsync", host-ip+'/path/to/file'],stdout=subprocess.PIPE)
for line in ssh.stdout:
    line  # do stuff

For performance improvement, which is important when the file is big, there is rsync. For more information about the exact improvement see following post and the answer from Rafa:
How does `scp` differ from `rsync`?

The algorithm would then be the following using rsync

import subprocess

subprocess.Popen(["rsync", host-ip+'/path/to/file'],stdout=subprocess.PIPE)
for line in ssh.stdout:
    line  # do stuff
白色秋天 2024-12-08 03:29:39

使用 iterreadline 来读取每一整行:

for i in iter(f.stdout.readline,"")

Use iter with readline to read each full line:

for i in iter(f.stdout.readline,"")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文