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

时间:2012-07-20 17:39:27

标签: python file subprocess

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

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

此时,如果我尝试读取文件,我什么也得不到。但是,通过以下操作后执行这些命令可以正常工作:

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可能需要seek回到文件的开头,否则当您尝试读取文件时,文件指针将位于文件的末尾:

 dumpFile.seek(0)

但是,如果您不需要实际存储dumpFile,那么最好做以下事情:

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

除非您的命令产生大量数据。

答案 2 :(得分:0)

如果你想阅读你已经写过的内容,要么关闭并重新打开文件,要么“快退”它 - 寻求偏移0。

如果你想在文件写入时读取文件,你可以这样做(甚至不需要将文件写入磁盘),请参阅另一个问题Capture output from a program