Python 将子进程标准输出的x行写入文件
我正在编写一个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行数 编辑: 我知道我可以在之后对文件进行后期处理,但我真
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解释器将执行必要的步骤来处理所有数据。