我正在编写一小段代码,其中涉及使用子流程来运行侦听某些实时数据的脚本

这是我的代码:

def subscriber():
    try:
        sub = subprocess.Popen('start listner',
                               stdout=subprocess.PIPE,
                               stderr=subprocess.Pipe)
    except Exception as e:
        print(e)
    return sub

def main():
    mysub = spark_subscriber()
    while True:
        # 1st version
        try:
            out = mysub.stdout.readline()
            print(out)
            sleep(1)
        # 2ndversion
        #try:
        #    out = mysub.stdout.readlines()  #notice the s
        #    print(out)
        #    sleep(1)
        # 3rd version
        #try:
        #    out = mysub.stdout.readlines()  #notice the s
        #    print(out)
        # 4th version
        #try:
        #    out = mysub.stdout.readline()
        #    print(out)
        except KeyboardInterrupt:
            exit_program(0)


第一个行为一次输出一行,睡眠一秒钟,然后输出下一行直到所有内容都打印出来。

由于我想一次打印所有行,因此我只是将readline()更改为readlines()并获得了第二个版本,并且我期望输出将是所有行。 -事实证明,无论我等待多长时间都不会打印任何内容

编辑:并且也没有输出为第三个版本

工作的是第四

我对readline()和readlines()背后的整个机制有些困惑。

有人可以解释为什么readlines()不起作用吗?

另外,如果readlines()可以在这种情况下工作,有人可以提供一个带有sleep()而没有sleep()的有效示例吗?

编辑:我在这里犯了一个大错误,第4版应该是可行的,第3版不起作用

最佳答案

readlines直到没有剩余内容可供读取时才返回结果,因此它将继续等待数据,直到数据的生成者退出为止(程序中的start_listner)。

关于python - Python readline和readlines行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23685982/

10-11 21:28