非阻塞
如果你使用的是Linux(因为Windows不支持在文件上调用select),则可以将subprocess模块与select模块一起使用。
import timeimport subprocessimport selectf = subprocess.Popen(['tail','-F',filename], stdout=subprocess.PIPE,stderr=subprocess.PIPE)p = select.poll()p.register(f.stdout)while True: if p.poll(1): print f.stdout.readline() time.sleep(1)
这将轮询输出管道以获取新数据,并在可用时进行打印。通常,
time.sleep(1)和
print f.stdout.readline()将被有用的代码替换。
封锁
你可以使用子流程模块,而无需额外的选择模块调用。
import subprocessf = subprocess.Popen(['tail','-F',filename], stdout=subprocess.PIPE,stderr=subprocess.PIPE)while True: line = f.stdout.readline() print line
当添加新行时,它还会打印新行,但是它将阻塞,直到尾部程序关闭为止,可能使用
f.kill()。



