Таким образом, в основном этот код подключается к серверам и загружает файлы, соответствующие этому шаблону, из одного каталога в другой. Однако, если сервер недоступен, он останавливает весь процесс. Я хочу, чтобы он пропустил его на следующий сервер. Как я могу это сделать?
Также он загружает каждый файл, содержащий pc_dblatmonstat_
. Хотя это отчасти правильно, мне нужны только те файлы, имена которых имеют вид pc_dblatmonstat_x_x
, где x заменяет фактическое значение этого файла в каталоге.
Например, я хочу файл pc_dblatmonstat_tpc01n1_scl000101018.log вместо pc_dblatmonstat_tpc01n1 .log
Вот что у меня есть
import os
import paramiko
import re
# 1. Create function
def get_server_files(local_path, host, port, username, password, remote_path, file_pattern):
"""Connects to host and searches for files matching file_pattern
in remote_path. Downloads all matches to 'local_path'"""
#Opening ssh and ftp
ssh_con = paramiko.SSHClient()
ssh_con.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_con.connect(host, port, username, password)
sftp_con = ssh_con.open_sftp()
print('Connecting to', host)
# Finding files
all_files_in_path = sftp_con.listdir(path=remote_path)
r = re.compile(file_pattern)
files = list(filter(r.match, all_files_in_path))
#Download files
for file in files:
file_remote = remote_path + file
file_local = local_path + file
print(file_remote + ' >>> ' + file_local)
sftp_con.get(file_remote, file_local)
#sftp_con.put(file_local, file_remote)
sftp_con.close()
ssh_con.close()
# 2. list of servers
# Add new dictionary for each server to this list
list_of_servers = [
{ 'host': '192.168.1.64',
'port': 22,
'username': 'pi',
'password': 'pi',
'remote_path': '/home/pi/Desktop/logs/',
'file_pattern': 'pc_dblatmonstat_*_'},
{ 'host': '192.168.1.65',
'port': 22,
'username': 'pi',
'password': 'pi',
'remote_path': '/home/pi/Desktop/logs/',
'file_pattern': 'pc_dblatmonstat_*_'}
]
# You could add the local_path to the function to define individual places for the
# files that you download.
local_path = r'C:\Users\urale\Desktop\logs\\'
# 3. Iterate through the list_of_servers, using the function above
for server in list_of_servers:
get_server_files(local_path, **server)