首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python3中对EOFError ()使用Ctrl和sys.stdin.readlines()之后,如何避免输入()的sys.stdin.readlines?

在Python3中对EOFError ()使用Ctrl和sys.stdin.readlines()之后,如何避免输入()的sys.stdin.readlines?
EN

Stack Overflow用户
提问于 2020-05-12 06:32:22
回答 1查看 228关注 0票数 1

我是一个完全的新手,试图教自己Python的个人成长和发展。所以请你对我放松点。(如果有什么生物学上的问题,我很乐意回报你!)

我试图用PyCharm CE在MacOSX (10.14.2 Mojave)上编写一个程序来完成以下工作:

1)通过从源复制/粘贴,让用户一次输入多行文本。例如:

玛丽和贝丝

转到

公园。

2)将所有行连接为一个,替换空格\n,如下所示:

玛丽和贝丝去公园了。

我已经做了大量的阅读,我发现让用户同时输入多行文本的一种更好的方法是使用sys.stdin.readlines(),确保用户用Control调用文件的末尾。到目前为止,我想出了以下几点

代码语言:javascript
复制
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()函数时,问题就在代码的后面.

代码语言:javascript
复制
search_word = input('Which word would you like to replace?')
print(search_word)

我得到以下错误消息:EOFError: EOF在读取一行

我见过其他有类似问题的人发的帖子,一些答案表明我试着.

代码语言:javascript
复制
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而不破坏我的计算机?

提前一吨谢谢!马里亚诺

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-12 07:00:21

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

您可以使用fileinput模块:

代码语言:javascript
复制
import fileinput

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

fileinput将循环遍历命令行参数中指定为文件名的输入中的所有行,如果不提供参数,则遍历标准输入。

您的代码可以由

代码语言:javascript
复制
one_string = "".join(map(str.rstrip, fileinput.input()))

删除尾随行提要和空格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61745258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档