0

Python ヒューズ fs をビルドします。私の readdir ジェネレーターでは、コードの最初の行は print ステートメントです。これは私のコンソールには表示されませんでした。バッファリングの問題だと思ったので、stderrへの出力に変更しました。まだ出力はありません。

次の行に手動フラッシュを追加しましたが、まだ何もありません。

次の行に time.sleep(3) を追加しました。プログラムは確かにスリープします。

def readdir(self, path, offset):
    print >> sys.stderr, 'Text'
    sys.stderr.flush()
    time.sleep(3)

次に、ディレクトリに他のコードを入力します (fuse.Direntry を生成します) 出力を取得し、ターミナルで ls を実行して、マウントされたヒューズ ディレクトリの内容を確認できますが、なぜ print コマンドが実行されないのか知りたいのです。この 1 つのジェネレーターでは機能しません。

アップデート

苦労している人のために:

def readdir(self, path, offset):
    print >> sys.stderr, 'Text'
    sys.stderr.flush()
    for o in os.listdir( "." + path ):
        yield fuse.Direntry(o)

コードです。ファイル リストが生成され、その中を移動できます。それは結構です。問題は、STDOUT、STDERR、どこにも「テキスト」が表示されないことです。

なぜこれがこのジェネレーターでのみ発生するのかを単純に尋ねていました。ヒューズコードの他の場所に印刷を配置して、非常にうまく出力を得ることができます。

4

1 に答える 1

1

FUSE コードは FUSE ライブラリの制御下で実行されるためstdinstdoutstderrがターミナル セッション内のものであるかどうかはわかりません。readdirジェネレーターが代替std*ストリームで呼び出される可能性は十分にあります。

FUSE コードの他の部分にはprint問題がないと言うので、すべてのprintステートメントにデバッグ ログ メッセージ (sys.stdout.isatty()またはの値repr(sys.stdout)が便利な場合もあります) を前に付けて、何が起こっているのかを理解できるようにすることをお勧めします。

于 2011-11-18T13:12:17.927 に答える