Мне нужно прозрачно работать с удаленными файлами, как если бы они были локальными файлами в некотором коде Python, который я пишу, поэтому я решил использовать SFTP для этой задачи. Работает следующий пример кода (он печатает первую строку удаленного файла):
import paramiko
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='192.168.8.103', username='root', password='pyjamas')
sftp = client.open_sftp()
test = sftp.open('/var/log/example/ingest.log', mode='r', bufsize=1)
print test.readline()
Я собираюсь подключиться ко многим файлам, поэтому я решил написать класс, который дает мне объект SFTPFile. Изучите следующий код:
import paramiko
class RemoteLog(object):
"""This class implements the remote log buffer."""
def __init__(self, host, user='', pw='', log=''):
"""Initializes a connection to a remote log."""
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=host, username=user, password=pw)
sftp = client.open_sftp()
self.log = sftp.open(log, mode='r', bufsize=1)
if __name__ == "__main__":
test = RemoteLog(host='192.168.8.103', user='root', pw='pyjamas', log='/var/log/example/ingest.log')
print test.log.readline()
К сожалению, readline () в этом сценарии ничего не возвращает. Там нет ошибок или очевидных объяснений.
Как мне скопировать функциональность из моего первого фрагмента кода в класс многократного использования?