3

非常に単純な python スクリプトを作成しました。

def read_then_follow(file):
    for line in file:
        yield line
    while True:
        line = file.readline()
        if not line:
            time.sleep(1.0)
            continue
        yield line

for line in read_then_follow("some_file.txt"): print line

ファイル「some_file.txt」には数行のテキストが含まれており、スクリプトを実行すると画面に書き込まれます。次に、 を使用してファイルに行を追加するとecho "line" >> some_file.txt、その行は 1 秒以内に画面に出力されます。しかし: vimでファイルを開き、一番下に行を追加して保存すると、スクリプトが機能しなくなります。vimで書き込まれた新しい行を画面に書き込むことも、それ以降のecho ...コマンドに応答することもありません。

参考までに、現在、Ubuntu 10.10 で python 2.6.6 を使用しています。

4

1 に答える 1

8

(Unixライクなオペレーティングシステムを使用していると思います。)

vimに保存すると、実際にはディスク上に同じ名前の新しいファイルが作成されます。スクリプトによって保持されているファイルハンドルは、ディレクトリエントリがなくなった古いファイルを引き続き指します。スクリプトが終了すると、古いファイルの参照カウンターが0になり、ファイルが削除されます。

于 2011-03-16T14:06:17.927 に答える