私のreaddirジェネレータでは、python fuse fsをビルドします。最初のコード行はprint文です。これは私のコンソールに一度も現れなかった。私はバッファリングの問題だと思ったので、stderrへの印刷に変更しました。まだ出力はありません。Pythonでジェネレータのstderrにプリント
手動で次の行にフラッシュを追加しました。まだ何も表示されていません。
私は次の行にtime.sleep(3)を追加しました。本当にprogはスリープします。
def readdir(self, path, offset):
print >> sys.stderr, 'Text'
sys.stderr.flush()
time.sleep(3)
私はその後、私は出力を得るのですか、私のマウントヒューズディレクトリの内容を参照するには、端末にLSを行うことができ、他のコード(利回りfuse.Direntry) でディレクトリを移入するために行くが、私はしたいですこの1つのジェネレータでprintコマンドが動作しない理由を知る
更新
苦労している人のためには:
def readdir(self, path, offset):
print >> sys.stderr, 'Text'
sys.stderr.flush()
for o in os.listdir("." + path):
yield fuse.Direntry(o)
コードです。それはファイルリストを生成し、私はそれを移動することができます。それは結構です。 問題は、「テキスト」がSTDOUT、STDERR、どこにも表示されないことです。
私は、なぜこれがこのジェネレータでのみ発生するのかを簡単に尋ねました。私はヒューズコードのどこかに印刷物を置くことができ、非常にうまく出力できます。
@delnan申し訳ありませんが、私はあなたのコメントを理解していません。それがあなたのコメントであるならば、私はコードの下にさらに歩留まりを使うように言います。 – gazhay
@delnan彼のポストをもう一度読んでください。彼は実際に彼が示していないコードに 'yield 'があると言っています。 \t \t印刷>> sys.stderrを持ち、 'テキスト' \t \t sys.stderrを持ち: – agf
これはコードである '\tデフのreaddir(自己、パス、オフセット)(私はそれがこのコメントで動作させることはできません)。フラッシュ()os.listdir中のO(+パス "")のための \t \t: \t \t \t降伏fuse.Direntry(O) ' – gazhay