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)

但是,如果您不需要实际 store dumpFile,最好执行以下操作:

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

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

于 2012-07-20T17:45:02.900 回答
0

如果你想阅读你已经写的内容,要么关闭并重新打开文件,要么“倒带”它——寻找偏移量 0。

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

于 2012-07-20T17:53:15.063 回答