Python 将子进程标准输出的x行写入文件

Python 将子进程标准输出的x行写入文件,python,python-3.x,Python,Python 3.x,我正在编写一个python脚本,它使用子流程模块运行一个命令,然后将输出写入一个文件。由于输出太大,我只想写输出的最后x行,其中包含所需的信息 import subprocess outFile=open('output.txt', 'w') proc=subprocess.Popen(command, cwd=rundir, stdout=outFile) 上面的代码将整个输出写入一个文件(这个文件非常大),但我想要的只是输出末尾的x行数 编辑: 我知道我可以在之后对文件进行后期处理,但我真

我正在编写一个python脚本,它使用子流程模块运行一个命令,然后将输出写入一个文件。由于输出太大,我只想写输出的最后x行,其中包含所需的信息

import subprocess
outFile=open('output.txt', 'w')
proc=subprocess.Popen(command, cwd=rundir, stdout=outFile)
上面的代码将整个输出写入一个文件(这个文件非常大),但我想要的只是输出末尾的x行数

编辑:
我知道我可以在之后对文件进行后期处理,但我真正想要的是从一开始就只写我需要的行,而不处理所有这些数据。

您可以在文件完全写入后截断文件,也可以为您的进程提供一个然后只写所需的行。

我建议将输出存储在变量中,然后进行一些处理。Python解释器将处理生成的所有数据,即使数据比RAM大


代码

打开('output.txt',w')作为fobj的
:
out=子进程。检查_输出(命令).rstrip().splitlines()
fobj.write('\n'.join(out[-MAX\u line:]))

解释

  • 函数
    subprocess.check_output
    将控制台输出作为字符串返回
  • 方法
    str.rstrip()
    返回缺少尾随空格的字符串。因此,参数
    MAX_LINES
    可以控制最后的非空行
  • 方法
    str.splitlines()
    返回字符串列表,每个字符串代表一行
  • out[-MAX\u行:]
    • MAX\u LINES>len(out)
      时,将以列表的形式返回整个输出

评论


始终使用上下文管理器(
和…
)!!!这对于文件管理来说更安全。

使用批处理命令后缀
>stdOut.txt
然后读取
stdOut.txt
文件怎么样?这也会将整个输出重定向到一个文件,但我想要的只是输出的特定部分。您不会避免某些处理。这与我想要避免的对写入文件进行后处理没有什么不同,有没有办法在subprocess的stdout选项中指定输出的一部分?根据文档(),没有办法在那里这样做,也许可以检查这个答案(),但看起来没有简单的解决方案。当他说文件“非常非常大”时,那是因为他不想完全处理它,但你的解决方案将它放入内存,我认为这对他来说是不可行的。@Lenormju Python解释器将执行必要的步骤来处理所有数据。