2012-07-20 86 views
0

我正在嘗試使用子進程將輸出寫入數據文件,然後通過它進行解析以檢查其中的某些數據。但是,當我需要通過文件的行進行讀取時,除非關閉文件然後重新打開,否則我總是會得到一個空白文件。雖然它有效,但我不喜歡這樣做,我想知道它爲什麼會發生。這是一個子進程的問題,還是另一個複雜的文件模式?在讀取之前需要關閉子進程文件輸出

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

在這一點上,如果我嘗試讀取這個文件,我什麼也沒得到。然而,它工作正常通過後執行以下命令:

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

回答

1

你可能需要seek迴文件的開頭,否則,文件指針將會在文件的結尾,當您嘗試閱讀:

dumpFile.seek(0) 

不過,如果你並不需要ACTUA LLY存儲dumpFile,它可能會更好做這樣的事情:除非你的命令會產生大量的數據,

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

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 
0

如果你想讀你已經寫了什麼,無論是關閉並重新打開該文件,或「倒帶」它 - 尋求抵消0

如果你想讀取文件而被寫入它,你可以這樣做(甚至不需要寫入磁盤),看到這個其他問題Capture output from a program

相關問題