我正在编写一个python脚本,该脚本使用子进程模块运行命令,然后将输出写入文件。由于输出太大,我只想在输出的最后x行中写出包含所需信息的行。
import subprocess
outFile=open('output.txt', 'w')
proc=subprocess.Popen(command, cwd=rundir, stdout=outFile)
上面的代码将整个输出写入文件(非常大),但是我想要的只是输出末尾的x行数。
编辑: 我知道以后可以对文件进行后处理,但是我真正想要的是从一开始就只写我需要的行,而不处理所有这些数据。
答案 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()
然后只写所需的行。