filename = 'tempfile'
def tail(filename):
fd = open(filename)
while True:
line = fd.readline()
if not line:
continue
else:
if filename != 'uh':
yield line
else:
print 'Returning f to close the file'
yield fd
try:
genObj = tail(filename)
valfromgen= genObj.next()
while valfromgen:
print valfromgen
valfromgen= genObj.next()
except:
traceback.print_exc()
try:
fd_Got_Back = genObj.send('uh')
fd_Got_Back.close()
except:
traceback.print_exc()
代码的意图:我只在generator函数中打开了文件,而不是在它外部打开的,但是,我想通过使用'send'关闭生成器函数之外的文件。在
我要做的是:从unix复制tail -f
。在
我是如何做到的:
问题:
问题是,当python代码在命令提示符下运行时,如果我按Ctrl+C(即SIGTERM),如何从python代码中关闭打开的temp文件。为了模拟这一点,我在tail
函数中打开了tempfile,每当出现异常(当我按下Ctrl+C时,系统将引发该异常),控件应该转到1st中,除非。然后,从这里开始,我尝试向生成器函数uh
发送一个值tail
,这样它就可以生成打开的文件的文件描述符,我可以用它来关闭打开的tempfile。在
PS:我希望有一个解决方案,我只在generator函数中打开文件,而不是在它外部打开文件。在
我已经解决了我被困的问题,我想出了这个办法解决方案:在
PS:(此键盘中断在Linux上可能有所不同..可能会引发SigTerm,但是,请检查。因此,为了使代码通用,只需删除键盘中断并使用normal except)
我想你误解了“发送”的工作原理。Send只会导致生成器在其下一次迭代中生成该值。它不会更改原始参数的值。然后,您可以将产生的价值用于某些目的。所以你可以让你的代码:
相关问题 更多 >
编程相关推荐