Python 2.7 を使用しています。これは、STDOUT と STERR を LOGFILE にリダイレクトして、Python から他のプログラムを起動するために現在行っていることです。
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] を続行しますか?」のようなメッセージが表示されることに注意してください。画面に表示され、それに反応することができます。現在、すべてがログに記録されているため、画面には何も表示されません。ここでの私の質問への回答は、このケースの解決に役立つはずです。
ありがとう。