我试图使用来自txt文件的python计时器按特定间隔读取每一行 但它只读取第一行,并且连续显示
我的代码是
def read():
try:
while True:
fo = open("foo.txt", "r")
threading.Timer(1.0, read).start()
line=fo.readline()
print line
if len(line)==0:
break
except:
pass
read()
答案 0 :(得分:0)
问题是你再次打开文件,从第一行开始读取,你读取该行打印它并再次继续循环,这使循环成为一个无限循环。
此外,您使用threading.Timer()
进行的操作不是您使用它的方式,threading.Timer()
在1秒后在新线程中启动函数read
,之后您将加载所有线程都无限期地运行read()
函数。
使用threading.Timer()
可以轻松完成您尝试做的事情(不使用time.sleep()
),让您的程序在特定的秒数内休眠。示例 -
def read():
import time
with open("foo.txt", "r") as fo:
for line in fo:
print line
time.sleep(1)
read()
如果你真的想使用threading.Timer()
,那么你不需要while
循环,你应该将文件对象作为参数传递给函数,例如 -
def read(fo):
line=fo.readline()
print line
if len(line) == 0:
return
t = threading.Timer(1.0, read, args=(fo,))
t.start()
t.join()
然后最初将函数调用为 -
with open("foo.txt", "r") as fo:
read(fo)
示例/演示 -
>>> def a(x):
... if x >50:
... return
... print(x)
... t = threading.Timer(1.0 , a, args=(x+1,))
... t.start()
... t.join()
...
>>> import threading
>>> a(1)
1
2
3
4
5
6
7
8