在读取之前需要关闭子进程文件输出

问题描述:

我正在尝试使用子进程将输出写入数据文件,然后通过它进行解析以检查其中的某些数据。但是,当我需要通过文件的行进行读取时,除非关闭文件然后重新打开,否则我总是会得到一个空白文件。虽然它有效,但我不喜欢这样做,我想知道它为什么会发生。这是一个子进程的问题,还是另一个复杂的文件模式?在读取之前需要关闭子进程文件输出

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

在这一点上,如果我尝试读取这个文件,我什么也没得到。然而,它工作正常通过后执行以下命令:

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

你可能需要seek回文件的开头,否则,文件指针将会在文件的结尾,当您尝试阅读:

dumpFile.seek(0) 

不过,如果你并不需要ACTUA LLY存储dumpFile,它可能会更好做这样的事情:除非你的命令会产生大量的数据,

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

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

如果你想读取文件而被写入它,你可以这样做(甚至不需要写入磁盘),看到这个其他问题Capture output from a program