0

サブプロセスを使用して出力をデータ ファイルに書き込み、それを解析してその中のデータをチェックしようとしています。ただし、ファイルの行を読み取る必要がある場合は、ファイルを閉じてから再度開かない限り、常に空のファイルが表示されます。それはうまくいきますが、私はこれをしなければならないのが好きではなく、なぜそれが起こるのか知りたいです. サブプロセスの問題ですか、それともファイルモードの別の複雑さですか?

dumpFile=open(filename,"w+")
dump = subprocess.Popen(dumpPars,stdout=dumpFile)
dump.wait()

この時点で、ファイルを読み込もうとしても、何も得られません。ただし、次のコマンドを実行すると正常に動作します。

dumpFile.close()
dumpFile=open(filename,"r")
4

3 に答える 3

2

このwithステートメントは、ブロックの終了後にファイルを自動的に閉じます。

with open(filename, "w+") as dumpFile:
    dump = subprocess.Popen(dumpPars, stdout=dumpFile)
    dump.wait()

with open(filename, "r") as dumpFile:
    # dumpFile reading code goes here
于 2012-07-20T17:43:45.047 に答える
1

おそらくseekファイルの先頭に戻る必要があります。そうしないと、ファイルを読み取ろうとすると、ファイル ポインタがファイルの最後になります。

 dumpFile.seek(0)

ただし、実際に を保存する必要がない場合は、dumpFile次のようにしたほうがよいでしょう。

dump = = subprocess.Popen(dumpPars,stdout=subprocess.PIPE)
stdoutdata,_ = dump.communicate()  #now parse stdoutdata

コマンドが大量のデータを生成しない限り。

于 2012-07-20T17:45:02.900 に答える
0

すでに書いたものを読みたい場合は、ファイルを閉じて再度開くか、「巻き戻し」ます - オフセット 0 を探します。

書き込み中にファイルを読みたい場合は、そうすることができます (ディスクに書き込む必要さえありません)。この他の質問を参照してくださいプログラムから出力をキャプチャする

于 2012-07-20T17:53:15.063 に答える