在Python 3中将Ctrl-D与sys.stdin.readlines()结合使用后,如何避免input()出现EOFError?

问题描述 投票:1回答:1

我是一个新手,试图自学Python以促进个人成长和发展。所以,请放轻松我。 (如果有任何生物学问题,我将很乐意回报您的支持!)

我正在尝试在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()函数时,问题在代码的更下方...

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

我收到以下错误消息:EOFError:读取行时出现EOF

[我从其他人那里看到过类似问题的帖子,并且一些答案表明我尝试了...

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

我尝试过,但是现在出现以下错误:OSError:[Errno 6]设备未配置:'/ dev / tty'。我也试过sys.stdin.flush(),但无济于事。

此时,我放弃了,并决定问专业人士:a)是否有更好的方法让用户复制多行文本并将其粘贴到程序中;b)如果到目前为止我的方法还可以,如何在不损坏计算机的情况下摆脱OSError?

提前感谢一吨!马里亚诺

python user-input multiline eoferror oserror
1个回答
0
投票

sys.stdin.readline()并不是一个好的解决方案。

您可以使用fileinput模块:

fileinput

[import fileinput for line in fileinput.input(): ... your code ... 将循环输入指定为命令行参数中给定文件名的输入中的所有行,如果没有提供参数,则返回标准输入。

注意:fileinput将包含尾随换行符;要删除它,请使用fileinput

© www.soinside.com 2019 - 2024. All rights reserved.