在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 一起使用?

在 Python 3.x 中将基于特定列的列和值的两个 DataFrame 与 Pandas 合并

在 Python 中将单词/数字与符号分开

在Hadoop平台跑python脚本

在 Python 3 中将二进制字符串转换为字节数组

如何在Python Pandas中将MultiIndex Dataframes与权重合并?