如何完成sys.stdin.readlines()输入?

时间:2011-04-05 08:26:37

标签: python input interactive sys

这可能是一个愚蠢的问题,但由于我找不到答案,我不得不问它。

在交互式python中,我想处理一条消息:

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

一切正常,但是...如何阻止它获取输入并将其保存到消息变量中?使用ctrl + c停止会停止整个过程,因此无需在任何地方保存输入。我想有一个简单的答案,我找不到......

5 个答案:

答案 0 :(得分:45)

对于基于unix的系统:

你好,你可以录音: Ctrl d

Ctrl d 通过发送EOF来关闭标准输入(stdin)。

示例:

>>> 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:

要在Windows上发送EOF,您可以通过 Ctrl z

替换 Ctrl d

答案 1 :(得分:5)

这是一个老问题,但它需要有关 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。

答案 2 :(得分:4)

使用CTRL-D

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

# message == ['abc\n', 'def\n']

答案 3 :(得分:3)

在Windows上只需按CTRL + Z并按Enter键

答案 4 :(得分:1)

如果您是 Mac 用户,请使用 command + D。它有效!