如何解决如何在input函数中使用多重处理,并避免出现“ EOFError:读取行时出现EOF”?
我目前正在制作一个应该使用多重处理的Python程序,其中一个函数处理UI,另一个函数处理更新数据文件。我的UI函数正在调用用户使用函数EOFError: EOF when reading a line
进行输入时,指出了错误input()
的原因。
下面是简化的代码,可以作为示例,并在我的真实程序中产生完全相同的错误:
import multiprocessing
import time
# Class with methods used to print strings.
class Printing:
# Setting of initial values is ignored.
def __init__(self):
pass
# Continuously calls for user input that is then printed.
def printInput(self):
while True:
string = input("Enter a string: ")
print(string)
# Continuously prints the character "X"
def printXs():
while True:
time.sleep(1) # Just used to slows the printing output.
print("X")
# Execution of script when told to run.
if __name__=='__main__':
mp1 = multiprocessing.Process(target=printXs)
mp2 = multiprocessing.Process(target=Printing().printInput)
mp1.start()
mp2.start()
产生的错误是第14行的EOFError: EOF when reading a line
,或者换句话说就是input ("Enter a string: ")
的代码段。
解决方法
标准输入流(stdin)在创建时未附加到流程中。由于通过多个进程从同一流中读取输入没有意义,因此默认设置是假定标准输入将仅由主进程读取。
在您的情况下,您将仅从一个流程中获取输入,但是您希望它成为您产生的流程之一。您可以在这种情况下附加标准输入:
def printInput(self):
sys.stdin = open(0) # <--- Here's the magic line...you'll need to "import sys" above too
while True:
string = input("Enter a string: ")
print(string)
从一个线程/进程输出到控制台,而在另一个线程/进程中接收控制台输入,这很奇怪。实际上,这似乎搞砸了。您不会得到所键入的所有输入,而只会得到自从最后一个“ X”打印以来输入的内容。我认为这只是为了达到目的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。