7

fifo を作成します。

mkfifo tofetch

私はこのpythonコードを実行します:

fetchlistfile = file("tofetch", "r")
while 1:
    nextfetch = fetchlistfile.readline()
    print nextfetch

私が望むように、それはreadlineで失速します。走る:

echo "test" > tofetch

そして、私のプログラムはもうストールしません。行を読み取り、無限にループし続けます。新しいデータがないのになぜ停止しないのでしょうか?

また、「not fetchlistfile.closed」も調べてみました。書き込みのたびに再度開いてもかまいませんが、Pythonはfifoがまだ開いていると考えています。

4

1 に答える 1

4

readlineのドキュメントによると、ファイルの終わりにいる場合に限り、空の文字列が返されます。Closedは、ファイルの終わりと同じではありません。ファイルオブジェクトは、.close()を呼び出したときにのみ閉じられます。コードがファイルの終わりに達すると、readline()は空の文字列を返し続けます。

ファイルオブジェクトをイテレータとして使用するだけの場合、Pythonは一度に1行ずつ自動的に読み取り、ファイルの終わりで停止します。このような:

fetchlistfile = file("tofetch", "r")
for nextfetch in fetchlistfile:
    print nextfetch

このecho "test" > tofetchコマンドは、名前付きパイプを開き、「test」を書き込み、パイプの端を閉じます。パイプの書き込み側が閉じているため、読み取り側はファイルの終わりを認識します。

于 2010-03-09T03:22:44.007 に答える