Откройте удаленный файл с помощью Paramiko в Python медленно - PullRequest
3 голосов
/ 27 сентября 2011

Я использую paramiko, чтобы открыть удаленный файл sftp в python.С файловым объектом, возвращенным paramiko, я читаю файл построчно и обрабатываю информацию.Это кажется очень медленным по сравнению с использованием встроенного в Python метода «open» из ОС.Ниже приведен код, который я использую для получения объекта файла.

Использование paramiko (медленнее в 2 раза) -

client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(myHost,myPort,myUser,myPassword)
sftp = client.open_sftp()
fileObject = sftp.file(fullFilePath,'rb')

Использование os -

import os
fileObject = open(fullFilePath,'rb')

AmЯ что-то пропустил?Есть ли способ сделать метод чтения объектного файла paramiko таким же быстрым, как и тот, который использует объектный файл os?

Спасибо !!

Ответы [ 2 ]

6 голосов
/ 27 сентября 2011

Возможно, ваша проблема вызвана тем, что файл является удаленным объектом.Вы открыли его на сервере и запрашиваете по одной строке за раз - поскольку это не локально, каждый запрос занимает гораздо больше времени, чем если бы файл находился на вашем жестком диске.Лучшая альтернатива - это, вероятно, сначала скопировать файл в локальное местоположение, используя SFTP get.

от Paramiko. После того, как вы это сделаете, вы можете открыть файл из локального местоположения.используя os.open.

2 голосов
/ 10 марта 2014

Вот способ, который работает с использованием очистки командной строки (cat) в paramiko и чтения всех строк одновременно.У меня хорошо работает:

import paramiko

client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.WarningPolicy())
client.connect(hostname=host, port=port, username=user, key_filename=ssh_file)             

stdin, stdout, stderr = client.exec_command('cat /proc/net/dev')
net_dump = stdout.readlines()
#your entire file is now in net_dump .. do as you wish with it below ...
client.close()

Файлы, которые я открываю, довольно маленькие, поэтому все зависит от размера вашего файла.Стоит попробовать :) 1004 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...