Как завершить ввод sys.stdin.readlines()?
Это может быть глупый вопрос, но так как я не могу найти ответ, я должен его задать.
В интерактивном Python я хочу обработать сообщение, которое я получаю с:
>>> message = sys.stdin.readlines()
Все работает нормально, но... как остановить получение входных данных и сохранить их в переменной сообщения? Остановка с помощью Ctrl+ C останавливает весь процесс, поэтому нет никакого ввода, который можно было бы сохранить. Я думаю, что есть простой ответ, который я просто не могу найти...
6 ответов
Для системы на основе Unix:
Здравствуйте, вы можете записать: Ctrld
Ctrld закрывает стандартный ввод (stdin), отправляя EOF.
Пример:
>>> import sys
>>> message = sys.stdin.readlines()
Hello
World
My
Name
Is
James
Bond
# <ctrl-d> EOF sent
>>> print message
['Hello\n', 'World\n', 'My\n', 'Name\n', 'Is\n', 'James\n', 'Bond\n']
Для Windows:
Чтобы отправить EOF в Windows, вы можете заменить Ctrld на Ctrlz
Это старый вопрос, но он требует обновления Windows и различных раскладок клавиатуры.
Если ни CTRL + Z, ни CTRL + D ** не работают для вас в Windows, и вы хотите узнать, что происходит, сделайте следующее:
- проверьте, используете ли вы английскую раскладку клавиатуры по умолчанию
- если у вас другая, нестандартная раскладка клавиатуры, попробуйте переключить настройку клавиатуры на английский в языковой панели, затем попробуйте нажать Ctrl + z после изменений
- если вы все еще не уверены, посмотрите на экран, что появляется в командной строке при нажатии Ctrl + Z. Какой символ вы видите? Когда я нажимал ctrl + z, я видел это: ^Y, а когда по ошибке я нажимал ctrl + y, я видел это ^Z, я нажимал ввод и ввод был принят, EOF отправил.
Это несколько странно и нелогично. Некоторое время назад я изменил раскладку клавиш, чтобы включить польские символы, но все общие клавиши остались без изменений, z по-прежнему отображается на z при обычном использовании клавиатуры, обычно ctrl + z ничего не делает на моей клавиатуре, поэтому меня не следует менять, Но, по-видимому, в cmd это работает по-другому, чтобы иметь связь по умолчанию между ctrl и z, я должен переключиться на макет по умолчанию или использовать элемент управления y для отправки EOF.
Использование CTRL-D
,
message = sys.stdin.readlines()
abc
def
<CTRL-D>
# message == ['abc\n', 'def\n']
Если вы пользователь Mac, используйте команду + D. Это работает!
Я проверил это в терминале кода VS.
После использования этой команды:
for line in stdin:
Я ввожу много строк данных. Продолжайте нажимать Enter, теперь это не работает.
Решение:
Нажмите Ctrl + Z , вы увидите ^Z в терминале.
Затем вы должны нажать Enter, чтобы закончить.