如何使用subprocess和ssh从大型远程文件中读取数据?
答案 0 :(得分:7)
import subprocess
ssh = subprocess.Popen(['ssh', 'user@host', 'cat', 'path/to/file'],
stdout=subprocess.PIPE)
for line in ssh.stdout:
line # do stuff
答案 1 :(得分:1)
上面的答案可行,但您必须设置ssh登录才能在your boxes之间不使用密码。还有其他方法可以使用Python在计算机之间传输文件。一种简单的方法,无需身份验证即可设置apache服务器并使用http request。
答案 2 :(得分:1)
对于性能改进,这在文件很大时很重要,有rsync。有关确切改进的更多信息,请参阅以下帖子和Rafa的答案: How does `scp` differ from `rsync`?
然后使用rsync
进行以下算法import subprocess
subprocess.Popen(["rsync", host-ip+'/path/to/file'],stdout=subprocess.PIPE)
for line in ssh.stdout:
line # do stuff
答案 3 :(得分:0)
使用iter
与readline
一起阅读每一行:
for i in iter(f.stdout.readline,"")