我正在编写一小段代码,其中涉及使用子流程来运行侦听某些实时数据的脚本
这是我的代码:
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/