Выход из программы при вводе пустой строки (sys.stdin)
Перепробовал различные способы, но так и не понял как добиться завершения программы при вводе пустой строки. Я прочитал, что если строка line пустая, то можно выйти условием if not line, но это тоже не помогает. Ловить ошибку при вводе ctrl+D я не хочу, интересует именно завершение программы при вводе пустой строки.
Подскажите, пожалуйста, как правильно это сделать?
Спасибо!
P.S. Код ниже
import sys
import os
with open('task1.txt', 'a') as some_file:
for line in sys.stdin:
if not line:
print(f"Файл был успешно записан. Вы можете найти его по адресу {os.path.join(os.getcwd(), 'task1.txt')}")
else:
some_file.write(line)
Ответы (3 шт):
for line in sys.stdin:
if len(line) > 1:
print(line)
else:
break
print("вышли")
вот так сможете выходить
вроде как ввод тоже при таком получении данных находится в строке, поэтому это надо учесть (что 1 символ всегда присутствует)
чтобы это более четко увидеть, можно выполнить такой код:
for line in sys.stdin:
if line == '\n':
break
# вывести введённую строку без последнего символа (который является символом '\n')
print(line[:-1])
print("вышли")
Предлагаю более интересный способ:
for line in iter(input, ''):
print(f'Введена строка: {line}')
else:
print('Была введена пустая строка, цикл закончен')
Объяснение:
iter(input, '')- создаёт итератор, который на каждой итерации будет вызывать функциюinput()и сверять полученное значение из функции с пустой строкой. Если из функции вернулась не пустая строка (т.е. что-то ввели вinput()), то введёное значение будет обработано в теле цикла;- Если в
input()на предыдущем шаге ничего не ввели (вернулась пустая строка''), то, значит, цикл заканчивается и попадает в блокelse, который выполняется после того, как цикл закончил свои итерации без прерывания (break).
Ссылки на документацию:
На самом деле else здесь можно спокойно убрать, т.к. приведён просто для демонстрации. Т.е. без него код будет выглядеть:
for line in iter(input, ''):
print(f'Введена строка: {line}')
print('Была введена пустая строка, цикл закончен')
У вас уже есть проверка на пустую строку просто допишите туда exit() и проверку на перевод строки:
import sys
import os
with open('task1.txt', 'a') as some_file:
for line in sys.stdin:
if not line or line == '\n': # перевод строки
print(f"Файл был успешно записан. Вы можете найти его по адресу {os.path.join(os.getcwd(), 'task1.txt')}")
exit() # выход из программы
else:
some_file.write(line)
В данном случае вы получите выход из программы даже если после цикла есть продолжение.