Как завершить ввод sys.stdin.readlines ()? - PullRequest
24 голосов
/ 05 апреля 2011

Это может быть глупый вопрос, но так как я не могу найти ответ, я должен его задать.

В интерактивном питоне я хочу обработать сообщение, которое я получаю:

>>> message = sys.stdin.readlines()

Все работает нормально, но ... как остановить получение входных данных и сохранить их в переменной сообщения?Остановка с помощью Ctrl + C останавливает весь процесс, поэтому нет никакого ввода, который можно было бы сохранить.Я думаю, что есть простой ответ, который я просто не могу найти ...

Ответы [ 4 ]

45 голосов
/ 05 апреля 2011

Для системы на основе Unix:

Здравствуйте, вы можете записать на пленку: Ctrl d

Ctrl d закрывает стандартный ввод (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, вы можете заменить Ctrl d на Ctrl z

5 голосов
/ 29 июля 2013

Это старый вопрос, но требуется обновление о 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.

4 голосов
/ 05 апреля 2011

Использование CTRL-D.

message = sys.stdin.readlines()
abc
def
<CTRL-D>

# message == ['abc\n', 'def\n']
3 голосов
/ 03 марта 2017

В Windows просто нажмите CTRL + Z и нажмите enter

...