簡體   English   中英

在 Python 3 中使用 Ctrl-D 和 sys.stdin.readlines() 后,如何避免 input() 出現 EOFError?

[英]How can I avoid an EOFError for input() after using Ctrl-D with sys.stdin.readlines() in Python 3?

我是一個完全新手,試圖自學 Python 以促進個人成長和發展。 所以請go對我放心。 (如果有任何生物學問題,我很樂意回報您!)

我正在嘗試在 MacOSX(10.14.2 Mojave)上的 PyCharm CE 中編寫一個程序來執行以下操作:

1)讓用戶通過從源復制/粘貼一次輸入一段多行的文本。 例如:

瑪麗和貝絲

去了

公園。

2) 將所有行合二為一,將 \n 替換為空格,如下所示:

瑪麗和貝絲去了公園。

我已經做了很多閱讀,我發現讓用戶一次輸入多行文本的首選方法是使用 sys.stdin.readlines(),確保用戶調用使用 Control-D 結束文件。 到目前為止,我已經想出了以下內容

import sys


print('''What is the text that you would like to enter?
         (press command-d at the end)\n''')

orig_text = sys.stdin.readlines()
one_string = "".join(orig_text)
one_string = one_string.replace('\n','')
print(one_string)

到目前為止,一切都很好 - one_string 打印“瑪麗和貝絲去了公園”。

當我使用常規 input() function ...

search_word = input('Which word would you like to replace?')
print(search_word)

我收到以下錯誤消息: EOFError: EOF when reading a line

我看過其他有類似問題的帖子,有些答案建議我嘗試...

sys.stdin.close()
sys.stdin = open('/dev/tty')
search_word = input('Which word would you like to replace?')
print(search_word)

我試過了,但現在我收到以下錯誤: OSError: [Errno 6] Device not configured: '/dev/tty' 我也試過sys.stdin.flush() ,但無濟於事。

在這一點上,我放棄了,決定問專業人士: a) 有沒有更好的方法讓用戶將多行文本復制並粘貼到程序中; b)如果到目前為止我的方法還可以,我怎樣才能在不破壞計算機的情況下擺脫 OSError?

提前致謝! 馬里亞諾

sys.stdin.readline() 不是一個好的解決方案。

您可以使用fileinput模塊:

import fileinput

for line in fileinput.input():
    ... code ...

fileinput將遍歷輸入中指定為命令行 arguments 中給出的文件名的所有行,如果沒有提供 arguments,則循環遍歷標准輸入。

您的代碼可以替換為

one_string = "".join(map(str.rstrip, fileinput.input()))

rstrip刪除尾隨的換行符和空格。

暫無
暫無

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

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