在Python 3中将Ctrl-D与sys.stdin.readlines()结合使用后,如何避免input()出现EOFError?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python 3中将Ctrl-D与sys.stdin.readlines()结合使用后,如何避免input()出现EOFError?相关的知识,希望对你有一定的参考价值。
我是一个新手,试图自学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)
''')
orig_text = sys.stdin.readlines()
one_string = "".join(orig_text)
one_string = one_string.replace('
','')
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?
提前感谢一吨!马里亚诺
sys.stdin.readline()并不是一个好的解决方案。
您可以使用fileinput
模块:
fileinput
[import fileinput
for line in fileinput.input():
... your code ...
将循环输入指定为命令行参数中给定文件名的输入中的所有行,如果没有提供参数,则返回标准输入。
注意:fileinput
将包含尾随换行符;要删除它,请使用fileinput
以上是关于在Python 3中将Ctrl-D与sys.stdin.readlines()结合使用后,如何避免input()出现EOFError?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 3 中将队列与并发未来的 ThreadPoolExecutor 一起使用?