【问题标题】:How to fetch sizes of all SFTP files in a directory through Paramiko如何通过 Paramiko 获取目录中所有 SFTP 文件的大小
【发布时间】:2018-07-12 06:16:31
【问题描述】:
import paramiko
from socket import error as socket_error
import os 
server =['10.10.0.1','10.10.0.2']
path='/home/test/'
for hostname in server:
    try:
        ssh_remote =paramiko.SSHClient()
        ssh_remote.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        privatekeyfile = os.path.expanduser('~/.ssh/id')
        mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile, password='test123')
        ssh_remote.connect(hostname, username = 'test1', pkey = mykey)
        sftp=ssh_remote.open_sftp()
        for i in sftp.listdir(path):
            info = sftp.stat(i)
            print info.st_size      
    except paramiko.SSHException as sshException:
        print "Unable to establish SSH connection:{0}".format(hostname)
    except socket_error as socket_err:
        print "Unable to connect connection refused"

这是我的代码。我试图获取远程服务器文件的文件大小。但下面的错误是抛出。有人可以指导一下吗?

错误

Traceback (most recent call last):
  File "<stdin>", line 15, in <module>
  File "/usr/lib/python2.6/site-packages/paramiko/sftp_client.py", line 337, in stat
    t, msg = self._request(CMD_STAT, path)
  File "/usr/lib/python2.6/site-packages/paramiko/sftp_client.py", line 624, in _request
    return self._read_response(num)
  File "/usr/lib/python2.6/site-packages/paramiko/sftp_client.py", line 671, in _read_response
    self._convert_status(msg)
  File "/usr/lib/python2.6/site-packages/paramiko/sftp_client.py", line 697, in _convert_status
    raise IOError(errno.ENOENT, text)
IOError: [Errno 2] No such file

【问题讨论】:

    标签: python sftp paramiko filesize


    【解决方案1】:

    SFTPClient.listdir 仅返回文件名,而不是完整路径。所以要在另一个 API 中使用文件名,你必须添加一个路径:

    for i in sftp.listdir(path):
        info = sftp.stat(path + "/" + i)
        print info.st_size     
    

    虽然效率低下。 Paramiko 已经知道大小,您只是通过使用SFTPClient.listdir 而不是SFTPClient.listdir_attrlistdir 在内部调用listdir_attr)来丢弃信息。

    for i in sftp.listdir_attr(path):
        print i.st_size  
    

    【讨论】:

    • 谢谢。完美运行。
    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    相关资源
    最近更新 更多