当前位置:  开发笔记 > 编程语言 > 正文

使用python使用ssh从服务器读取文件

如何解决《使用python使用ssh从服务器读取文件》经验,为你挑选了3个好方法。

我正在尝试使用python中的ssh从服务器读取文件.我正在使用paramiko进行连接.我可以连接到服务器并运行像'cat filename'这样的命令并从服务器获取数据,但我尝试读取的一些文件大小约为1 GB或更多.

如何使用python逐行读取服务器上的文件?

附加信息:经常做的是运行'cat filename'命令并将结果存储在变量中并解决该问题.但由于这里的文件非常大,我正在寻找一种逐行读取文件的方法.

编辑:我可以读取一堆数据并将其拆分成行,但问题是缓冲区中接收的数据并不总是包含完整的行.例如,如果缓冲区有300行,则最后一行可能只是服务器上行的一半,下一半将在下次调用服务器时获取.我想要完整的线条

编辑2:我可以使用什么命令在特定范围内的文件中打印行.喜欢打印前100行,那么接下来的100行等等?这样缓冲区将始终包含完整的行.



1> Matt Good..:

Paramiko的 SFTPClient类允许您获得类似文件的对象,以Pythonic方式从远程文件中读取数据.

假设你有一个开放的SSHClient:

sftp_client = ssh_client.open_sftp()
remote_file = sftp_client.open('remote_filename')
try:
    for line in remote_file:
        # process line
finally:
    remote_file.close()


+1,比麻烦猫更好(对于我喜欢的所有猫科动物! - ).

2> jfs..:

这是@Matt Good的答案的扩展:

from contextlib     import closing
from fabric.network import connect

with closing(connect(user, host, port)) as ssh, \
     closing(ssh.open_sftp()) as sftp, \
     closing(sftp.open('remote_filename')) as file:
    for line in file:
        process(line)



3> g33kz0r..:
#!/usr/bin/env python
import paramiko
import select
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('yourhost.com')
transport = client.get_transport()
channel = transport.open_session()
channel.exec_command("cat /path/to/your/file")
while True:
  rl, wl, xl = select.select([channel],[],[],0.0)
  if len(rl) > 0:
      # Must be stdout
      print channel.recv(1024)

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有