簡體   English   中英

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

[英]How to finish sys.stdin.readlines() input?

這可能是一個愚蠢的問題,但是由於找不到答案,我不得不提出這個問題。

在交互式python中,我想處理一條消息:

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

一切正常,但是...如何阻止它獲取輸入並將其保存到message變量中? 使用ctrl + c停止將停止整個過程,因此沒有輸入要保存在任何地方。 我想我找不到一個簡單的答案...

對於基於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 d替換為Ctrl z

這是一個老問題,但是需要有關Windows和不同鍵盤布局的更新

如果在Windows上 CTRL + ZCTRL + D **都不適合您 ,並且您正在漫游正在發生的事情,請執行以下操作:

  • 檢查您是否使用默認的英文鍵盤布局
  • 如果您有其他非默認的鍵盤布局,請嘗試在語言欄中將鍵盤設置切換為英語,然后在更改后嘗試按ctrl + z
  • 如果仍然感到困惑,請查看屏幕,當您按ctrl + z時,命令行中會顯示什么。 您看到什么符號? 當我按ctrl + z時,我看到的是:^ Y,而當我誤按ctrl + y時,我看到了這個^ Z,我按enter並輸入了內容,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']

在Windows上,只需執行CTRL + Z,然后按Enter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM