在 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 以促进个人成长和发展。所以请对我放轻松。 (如果有任何生物学问题,我很乐意return帮个忙!)
我正在尝试在 MacOSX (10.14.2 Mojave) 的 PyCharm CE 中编写一个程序来执行以下操作:
1) 让用户通过 copying/pasting 从源中一次输入多行文本块。例如:
玛丽和贝丝
去了
公园.
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 打印出 "Mary and Beth went to the park."
问题出在代码的更下方,当我使用常规的 input() 函数时...
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] 设备未配置:'/dev/tty'。
我也试过sys.stdin.flush(),没用
至此,我放弃了,决定请教专业人士:
a) 是否有更好的方法让用户将多行文本复制并粘贴到程序中;
b) 如果到目前为止我的方法没问题,我怎样才能在不破坏我的计算机的情况下摆脱 OSError?
提前致谢!
马里亚诺
我完全是个新手,正在努力自学 Python 以促进个人成长和发展。所以请对我放轻松。 (如果有任何生物学问题,我很乐意return帮个忙!)
我正在尝试在 MacOSX (10.14.2 Mojave) 的 PyCharm CE 中编写一个程序来执行以下操作:
1) 让用户通过 copying/pasting 从源中一次输入多行文本块。例如:
玛丽和贝丝
去了
公园.
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 打印出 "Mary and Beth went to the park."
问题出在代码的更下方,当我使用常规的 input() 函数时...
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] 设备未配置:'/dev/tty'。 我也试过sys.stdin.flush(),没用
至此,我放弃了,决定请教专业人士: a) 是否有更好的方法让用户将多行文本复制并粘贴到程序中; b) 如果到目前为止我的方法没问题,我怎样才能在不破坏我的计算机的情况下摆脱 OSError?
提前致谢! 马里亚诺