Sys stdin readlines python как закончить ввод
Перейти к содержимому

Sys stdin readlines python как закончить ввод

  • автор:

Выход из программы при вводе пустой строки (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"Файл был успешно записан. Вы можете найти его по адресу ") else: some_file.write(line) 

Отслеживать
задан 2 янв 2021 в 11:31
896 4 4 серебряных знака 16 16 бронзовых знаков

3 ответа 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("вышли") 

Python: потоковый ввод stdin

В общем (классическом) виде чтение с помощью stdin производится следующим образом:

import sys for line in sys.stdin: # rstrip('\n') "отрезает" от строки line идущий справа символ # перевода строки, ведь print сам переводит строку print(line.rstrip('\n'))

Если запустить эту программу, она будет работать вечно. Чтобы показать, что ввод закончен, пользователю недостаточно нажать Enter — компьютер не знает, завершил пользователь работу или будет еще что-то вводить (при этом Enter превратится в пустую строку). Вместо этого надо нажать Ctrl + D (если работаете в консоли Linux или IDE PyCharm) либо Ctrl + Z, затем Enter (если работаете в консоли Windows).

Если вы работаете в IDE Wing, кликните правой кнопкой мыши и выберите Send EOF, затем нажмите Enter. Это запишет в поток ввода специальный символ EOF (end of file), который отмечает конец ввода.

Через sys.stdin можно вычитать всё, что попадает через ввод в список (количество строк ввода заранее неизвестно):

data = list(map(str.strip, sys.stdin))

Все строки можно считать (с сохранением символов перевода строки) в список вот таким образом:

data = sys.stdin.readlines()

Cчитать многострочный текст из стандартного потока ввода в текстовую переменную можно вот так:

str_data = sys.stdin.read()

Sys stdin readlines python как закончить ввод

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Отладка sys.stdin в PyCharm

Проблема состоит в вводе текста с sys.stdin в отладчике PyCharm.
Мне нужно отладить получаемый текст, но для этого его сначала надо ввести, именно в этом по сути и состоит проблема. Он заглушается. Не получается продолжить отладку. Точки останова не помогают
Как с этим работать?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Отладка в PyCharm
Использую PyCharm community edition 3.4. Добавил self.__a в Watches. Мой пример: .

Отладка в PyCharm
Как производить отладку в PyCharm?

Запуск программы с sys.args на shell или PyCharm console
Привет! Не понимаю, почему мне выкидывает IndexError: list index out of range в этой строчке: B.

Pycharm пошаговая отладка, debugger внутри функции
Добрый день! Должен сказать, что процесс дебага в pycharm не интуитивный от слова совсем. Крайне.

Автоматизируй это!

Эксперт Python

7537 / 4554 / 1205
Регистрация: 30.03.2015
Сообщений: 13,116
Записей в блоге: 29

Bori, почему не просто input() ?
и все работает, просто надо из вкладки дебаг переключиться на влкдку Console, гд обычно проги выполняются, там ввести и вернуться в дебаг

Регистрация: 23.07.2021
Сообщений: 4

Да я сам не против input(), но у меня сейчас тема sys и там имеется потоковый ввод sys.stdin и вот моя задача им пользоваться. Но с ним у меня возникает проблема в отладке. Строка data = list(map(str, sys.stdin)) читается и просит в консоли ввести текст. Вот. Я ввожу. Логично, что мне нужно теперь после этого ввода продолжить дальше отладку, но Enter и Cntrl — D не действуют, а пишется «Pause the process to use command-line.». Приостановить процесс использования командной строки. А как приостановить я хз))) я слышал, что можно как-то input() задействовать, но куда и как пока не понимаю
Может попробуешь у себя это? вот программа: и вот входные данные:
сама программа работает, но отладчиком у меня с ней не получается пользоваться

1 2 3 4 5 6 7 8 9 10 11 12
import sys import sys t = int(input()) spisok, d = list(map(str.strip, sys.stdin)), {} for i in range(t): d[i], spisok = [spisok[j].split()[1] for j in range(1, int(spisok[0]) + 1)], spisok[int(spisok[0]) + 1:] if all('5' in i for i in d.values()): print('ДА') else: print('НЕТ')

4
3
Иванов 4
Петров 5
Сидоров 3
2
Кузнецов 5
Петренко 5
3
Лебедев 4
Иваненко 4
Смирнов 5
2
Овчинников 4
Козлов 5

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *