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()
Intention of the code: I have opened the file in the generator function only and not outside it, but, I want to close that file outside the generator function by using 'send' probably.
What I am trying to do: Replicating
tail -f from unix.
How I am trying to do:
- Open a tempfile in read mode.
- If the tempfile has 1 new line written in it (which I'll keep on writing manually and saving tempfile using notepad), yield the newly written line.
The problem is that I'm trying to check how I can close the opened tempfile from this python code if I press Ctrl + C (i.e. SIGTERM) when this Python code runs in command prompt. In order to emulate this, I have opened the tempfile in the
tail function, and whenever there is an exception (which will be raised by the system when I press Ctrl + C), the control should go in the 1st except. Then, from here, I'm trying to send a value
uh to the generator function
tail, so that it should yield the file descriptor of the opened file which I can use to close the opened tempfile.
PS: I expect a solution where I have opened the file in the generator function only and not outside it.