我使用Python 2.7。以下是我目前从Python启动其他程序并将STDOUT和STERR重定向到LOGFILE的方法:
首先,我不确定我的上述脚本是否是最佳解决方案。我必须使用临时文件,因为即使subprocess.check_call调用失败,我也想捕获日志。如果您有改进上述脚本的想法,我会很感激。
此外,我想将标准输出和标准错误输出正常显示在屏幕上,并将它们记录到日志文件中。我该怎么做?请注意,如果我不指定标准输出,我会在屏幕上看到像“出现错误,您是否要继续[y/n]?”这样的内容,然后我可以对其进行反应。但现在由于所有内容都被记录到日志中,我无法在屏幕上看到任何内容。回答我的问题应该能够帮助解决这个问题。
谢谢。
try:
# Execute command and print content to LOGFILE
tempname = os.path.abspath('./text.txt')
TEMPFILE = open(tempname, 'wb')
print 'Executing: ', command
subprocess.check_call(command, shell = True, stdout = TEMPFILE, stderr = TEMPFILE)
TEMPFILE.close()
LOGFILE.write(open(tempname, 'rU').read())
LOGFILE.close()
os.remove(tempname)
except Exception as errmsg:
# If fails then print errors to LOGFILE
TEMPFILE.close()
LOGFILE.write(open(tempname, 'rU').read())
os.remove(tempname)
print messages.crit_error_bad_command % command, '\n', str(errmsg)
print >> LOGFILE, messages.crit_error_bad_command % command, '\n', str(errmsg)
LOGFILE.close()
首先,我不确定我的上述脚本是否是最佳解决方案。我必须使用临时文件,因为即使subprocess.check_call调用失败,我也想捕获日志。如果您有改进上述脚本的想法,我会很感激。
此外,我想将标准输出和标准错误输出正常显示在屏幕上,并将它们记录到日志文件中。我该怎么做?请注意,如果我不指定标准输出,我会在屏幕上看到像“出现错误,您是否要继续[y/n]?”这样的内容,然后我可以对其进行反应。但现在由于所有内容都被记录到日志中,我无法在屏幕上看到任何内容。回答我的问题应该能够帮助解决这个问题。
谢谢。
subprocess Popen.communicate()
,它会返回stdout,stderr
。这样你就可以对它进行任何想要的操作(记录、打印等)。 - TJD