将x行子流程标准输出写入文件

时间:2019-05-07 12:15:12

标签: python python-3.x

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

import subprocess
outFile=open('output.txt', 'w')
proc=subprocess.Popen(command, cwd=rundir, stdout=outFile)

上面的代码将整个输出写入文件(非常大),但是我想要的只是输出末尾的x行数。

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

2 个答案:

答案 0 :(得分:1)

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


代码

N2

EXPLANATION

  • 函数with open('output.txt', 'w') as fobj: out = subprocess.check_output(command).rstrip().splitlines() fobj.write('\n'.join(out[-MAX_LINES:])) 以字符串形式返回控制台输出。
  • 方法subprocess.check_output返回的字符串缺少尾随空格。因此参数str.rstrip()可以控制最后一个非空行。
  • 方法MAX_LINES返回一个字符串列表,每个字符串代表一行。
  • str.splitlines()
    • out[-MAX_LINES:]时,它将以列表形式返回整个输出。

评论

始终使用上下文管理器MAX_LINES > len(out))!这对于文件管理更安全。

答案 1 :(得分:0)

您可以在文件完全写完后截断文件,或者为进程添加https://www.newtonsoft.com/json,您可以getvalue()然后只写所需的行。