【问题标题】:Subprocess file output needs to close before reading子进程文件输出需要在读取前关闭
【发布时间】:2012-07-20 17:39:26
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python file subprocess


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

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

       dumpFile.seek(0)
      

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

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

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

      【讨论】:

        【解决方案3】:

        如果您想阅读您已经编写的内容,请关闭并重新打开文件,或者“倒回”它 - 寻求偏移 0。

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

        【讨论】:

          猜你喜欢
          • 2018-09-07
          • 1970-01-01
          • 1970-01-01
          • 2018-10-19
          • 1970-01-01
          • 2019-04-23
          • 1970-01-01
          • 2012-04-06
          • 2010-09-21
          相关资源
          最近更新 更多