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()
コードの意図: ジェネレーター関数内のみでファイルを開き、その外側ではファイルを開きませんでしたが、おそらく 'send' を使用して、ジェネレーター関数の外側でそのファイルを閉じたいと考えています。
私がやろうとしていること: tail -f
unix からの複製。
私がやろうとしている方法:
- 読み取りモードで一時ファイルを開きます。
- tempfile に 1 つの新しい行が書き込まれている場合(手動で書き続け、メモ帳を使用して tempfile を保存します)、新しく書き込まれた行を生成します。
問題:
問題は、この Python コードがコマンド プロンプトで実行されているときにCtrl+ C (つまり SIGTERM)を押すと、この Python コードから開いている一時ファイルを閉じる方法を確認しようとしていることです。これをエミュレートするために、tail
関数で一時ファイルを開きました。例外が発生するたびに( +を押すとシステムによって発生します)CtrlC、制御は最初の例外に移動する必要があります。uh
次に、ここからジェネレーター関数に値を送信しようとしてtail
います。これにより、開いている一時ファイルを閉じるために使用できる、開いているファイルのファイル記述子が生成されます。
PS: ファイルをジェネレーター関数でのみ開き、その外側では開かないという解決策を期待しています。