32

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

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

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

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

4

5 回答 5

62

对于基于 unix 的系统:

你好,你可以录音:Ctrld

Ctrld通过发送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,您可以替换CtrldCtrlz

于 2011-04-05T08:30:29.970 回答
6

这是一个老问题,但它需要有关Windows 和不同键盘布局的更新。

如果CTRL + ZCTRL + D ** 在 Windows上都不适合您,并且您正在徘徊,请执行以下操作:

  • 检查您是否使用默认的英文键盘布局
  • 如果您确实有不同的非默认键盘布局,请尝试在语言栏中将键盘设置切换为英语,然后尝试在更改后按 ctrl + z
  • 如果您仍然感到困惑,请查看屏幕,当您按下 ctrl + z 时,命令行中会出现什么。你看到了什么符号?当我按 ctrl + z 时,我看到了这个:^Y,当我错误地按 ctrl + y 时,我看到了这个 ^Z,我按 enter 并输入了输入,EOF 发送。

这有点奇怪和违反直觉。我前段时间更改了键布局以包含波兰字符,但所有常用键都保持不变,当我正常使用键盘时 z 仍然映射到 z ,通常 ctrl + z 在我的键盘上什么都不做,所以我不应该改变. 但显然在 cmd 中它的工作方式不同,为了在 ctrl 和 z 之间建立默认链接,我必须切换到默认布局,或者使用 control y 发送 EOF。

于 2013-07-29T12:52:53.303 回答
5

使用CTRL-D.

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

# message == ['abc\n', 'def\n']
于 2011-04-05T08:30:20.723 回答
4

在 Windows 上只需执行 CTRL+Z 并按 Enter

于 2017-03-03T10:08:16.443 回答
2

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

于 2021-01-07T13:56:54.277 回答