Лишний вывод else
В переменную a ввожу серийник, дальше в C:/Python3/1.txt хранится список айпишников серверов, к этим сервакам коннектится paramiko. Скрипт делает cat на каждом серваке и сохраняет всё в файлы.
Потом то, что я ввёл в переменной a ищется в сохранённых файлах addr_{info["hostname"]}.txt и если есть значение a выводится, это всё работает.
Но при любом условии у меня все выводится еще else как бы и куда я else не ставил, либо перестаёт работать поиск, либо поиск работает но всегда выводится этот else.
import paramiko
a = input('введите: ')
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
file1 = open('C:/Python3/1.txt', 'r')
for line in file1:
info = {}
info['ip'], info['hostname'], *_ = line.split()
def connector():
client.connect(info['ip'], username='test', port=22, key_filename='C:/Python3')
try:
connector()
stdin, stdout, stderr = client.exec_command('cat /etc/1/test.txt')
data = stdout.read() + stderr.read()
with open(f'C:/Python3/addr_{info["hostname"]}.txt', 'wb') as f:
f.write(data)
except Exception as e:
error_log = str(e)
print('error_log')
with open(f'C:/Python3/addr_{info["hostname"]}.txt', encoding='utf-8') as file:
for line in file:
if a in line:
print(info['hostname'] + ' - ' + line, end='')
else:
print('не найдено')
exit()
Как добиться того что бы else выводился только в том случае, когда if a in line: ничего не находил.
Ответы (1 шт):
У вас блок else связан с for. При таком связывании код из else будет выполняться, если выход из for произошёл без break (в Вашем случае — всегда).
Удаление блока else не повлияет на алгоритм:
for line in file1:
...
# else:
# print('не найдено')
UPD:
Чтобы один раз вывести не найдено, если подстроки нет в файле, можно завести флаг. Например, is_find:
is_find = False
for line in file:
if a in line:
print(info['hostname'] + ' - ' + line, end='')
is_find = True
if not is_find:
print('не найдено')