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

2024-10-02 12:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

此时,如果我试图读取文件,我什么也得不到。但是,在以下操作之后执行这些命令可以很好地工作:

^{pr2}$

Tags: 文件数据数据文件stdout模式流程openfilename
3条回答

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

 dumpFile.seek(0)

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

^{pr2}$

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

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

相关问题 更多 >

    热门问题