2014-08-18 2 views
2

Я использую Paramiko для подключения к серверу через SSH, запускаю команду для создания отчета, а затем загружаю отчет на локальный компьютер. Кажется, что все работает нормально, без ошибок, но полученный файл пуст на моем локальном компьютере. Я использую Python 2.7 и последнюю версию Paramiko. Файл, который я пытаюсь загрузить, это CSV. Я проверил, что файл содержит сервер данных.Paramiko - sftp.get загружает пустой файл

код я использую ниже:

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() 

ответ

1

Вы пытаетесь загрузить файл до ssh.exec_command закончил.

Вам нужно подождать; наилучшим способом было бы читать от stdout и/или stderr до EOF.

Я думаю, что эти чтения будут блокироваться, но поскольку вам нечего делать, пока они не закончат, все равно должно быть хорошо. И я верю EOF будет выглядеть как пустая строка: "".

+0

Чтение команд 'stdout' и/или' stderr' до тех пор, пока EOF не станет определенно лучшим вариантом. – glglgl

+0

Спасибо, @glglgl. –

+0

Спасибо Ethan и glglgl! Я знал, что ответ должен быть чем-то простым. Сейчас он работает отлично. Вот что я добавил ниже строки ssh.exec_command: «exit_status = stdout.channel.recv_exit_status()», как найдено @ http://stackoverflow.com/a/6570087/3954183 –

Смежные вопросы