微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在input函数中使用多重处理,并避免出现“ EOFError:读取行时出现EOF”?

如何解决如何在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 举报,一经查实,本站将立刻删除。