如何获取子进程的 stderr 流输出的最后 N 行? [英] How to get the last N lines of a subprocess' stderr stream output?
问题描述
我是一名 Python 新手,正在编写一个 Python (2.7) 脚本,该脚本需要执行多个外部应用程序,其中一个将大量输出写入其 stderr 流.我想弄清楚的是一种简洁明了的方式(在 Python 中)从该子进程的 stderr 输出流中获取最后 N 行.
I am a Python newbie writing a Python (2.7) script that needs to exec a number of external applications, one of which writes a lot of output to its stderr stream. What I am trying to figure out is a concise and succinct way (in Python) to get the last N lines from that subprocess' stderr output stream.
目前,我正在从我的 Python 脚本运行该外部应用程序,如下所示:
Currently, I am running that external application from my Python script like so:
p = subprocess.Popen('/path/to/external-app.sh', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
if p.returncode != 0:
print "ERROR: External app did not complete successfully (error code is " + str(p.returncode) + ")"
print "Error/failure details: ", stderr
status = False
else:
status = True
我想从其 stderr 流中捕获最后 N 行输出,以便将它们写入日志文件或通过电子邮件发送等.
I'd like to capture the last N lines of output from its stderr stream so that they can be written to a log file or emailed, etc.
推荐答案
N = 3 # for 3 lines of output
p = subprocess.Popen(['/path/to/external-app.sh'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
if p.returncode != 0:
print ("ERROR: External app did not complete successfully "
"(error code is %s)" % p.returncode)
print "Error/failure details: ", '\n'.join(stderr.splitlines()[-N:])
status = False
else:
status = True
这篇关于如何获取子进程的 stderr 流输出的最后 N 行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!