Как завершить ввод 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+Z и нажмите Enter

Использование 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, чтобы закончить.

Другие вопросы по тегам