我使用 Python 2.7。这是我目前正在做的从 Python 启动其他程序,将 STDOUT 和 STERR 重定向到 LOGFILE:
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 调用失败的情况下我也想捕获日志。如果您有想法如何改进上述脚本,我将不胜感激。
此外,我想更改此设置,以便 STDOUT 和 STDERR 正常显示在屏幕上,并且也显示到日志文件中。我该怎么做呢?请注意,如果我不指定 STDOUT,我会看到类似“有错误,您希望继续 [y/n]?”之类的内容。在屏幕上,然后我可以对它做出反应。现在因为一切都进入日志,我在屏幕上看不到任何东西。我在这里的问题的答案应该有助于解决这个问题。
谢谢。