【问题标题】:Paramiko - sftp.get downloads blank fileParamiko - sftp.get 下载空白文件
【发布时间】:2014-08-18 21:02:55
【问题描述】:

我正在使用 Paramiko 通过 SSH 连接到服务器,运行命令生成报告,然后将报告下载到我的本地计算机。一切似乎都没有错误,但结果文件在我的本地计算机上是空白的。我正在使用 Python 2.7 和最新版本的 Paramiko。我要下载的文件是 .csv 。我已经验证该文件包含数据服务器端。

我使用的代码如下:

try:
    ssh = paramiko.SSHClient()

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    ssh.connect(hostname, username=user_name, key_filename=key_file)
except:
    print 'error connecting'

try:
    stdin, stdout, stderr  = ssh.exec_command(report_cmd)
except:
    print 'error generating report'

try:

    sftp = ssh.open_sftp()  
    sftp.get(source_str, dest_str)

except:
    print 'failed to DL file' + str(sys.exc_info())

ssh.close()

【问题讨论】:

    标签: python paramiko


    【解决方案1】:

    您正尝试在ssh.exec_command 完成之前下载文件。

    你需要等待;最好的方法是从stdout 和/或stderr 读取直到EOF

    我认为这些读取会阻塞,但既然在它们完成之前你无事可做,那应该没问题。我相信EOF 看起来像一个空字符串:""

    【讨论】:

    • 读出命令的 stdout 和/或 stderr 直到 EOF 绝对是一个更好的选择。
    • 感谢 Ethan 和 glglgl!我知道答案一定很简单。它现在工作得很好。这是我最终在 ssh.exec_command 行下面添加的内容: "exit_status = stdout.channel.recv_exit_status()" ,如 @stackoverflow.com/a/6570087/3954183
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2019-06-11
    • 2018-10-07
    • 2019-03-22
    • 1970-01-01
    • 2018-02-04
    相关资源
    最近更新 更多