Привет.
Написал небольшую функцию для проверки соединения по sftp, добавил обработчик исключений, если соединение не происходит успешно:
def check_sftp_connection(port_sftp):
'''try to authorized on CrushFTP via sftp and sownload file'''
try:
print('1')
transport = paramiko.Transport((args.ip, port_sftp))
print('2')
transport.connect(username=args.username, password=args.password)
print('3')
sftp_con = paramiko.SFTPClient.from_transport(transport)
print('4')
if sftp_con.file('/hello', mode='r', bufsize=-1).read().decode().find("Hello")==-1:
print('5')
sftp_con.close()
return "test file not found! Probably sftp protocol works incorrect!", 2
except:
return "CrushFTP is not available via sftp protocol", 2
return '', 0
Как должно работать по моей задумке: если вызывается любое исключение — должен отработать «CrushFTP is not available via sftp protocol», 2
Но на деле иногда (при стечении определённых обстоятельств) получается вот это:
1
2
Exception: Error reading SSH protocol banner
Traceback (most recent call last):
File "/usr/lib/python3.4/site-packages/paramiko/transport.py", line 1854, in _check_banner
buf = self.packetizer.readline(timeout)
File "/usr/lib/python3.4/site-packages/paramiko/packet.py", line 327, in readline
buf += self._read_timeout(timeout)
File "/usr/lib/python3.4/site-packages/paramiko/packet.py", line 497, in _read_timeout
raise socket.timeout()
socket.timeout
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.4/site-packages/paramiko/transport.py", line 1710, in run
self._check_banner()
File "/usr/lib/python3.4/site-packages/paramiko/transport.py", line 1858, in _check_banner
raise SSHException('Error reading SSH protocol banner' + str(e))
paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
Critical error: process uptime is too low... Only 8 sec; CrushFTP is not available via sftp protocol
Почему такое происходит? И как этого избежать? Я хочу обрабатывать все исключения.
Спасибо.