logging.basicConfig
использует StreamHandler
, когда параметр handler
/ filename
/ stream
не задан, а StreamHandler
по умолчанию - поток STDERR:
class StreamHandler(Handler):
def __init__(self, stream=None):
"""
Initialize the handler.
If stream is not specified, sys.stderr is used.
"""
Handler.__init__(self)
if stream is None:
stream = sys.stderr # <- Here
self.stream = stream
Для использования STDOUT, передайте sys.stdout
как stream
:
logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
Теперь, как и в настоящее время, вы можете захватить STDERR из оболочки как:
python ./test.py 2> foo.txt
Таким образом, перенаправивподойдет файловый дескриптор 2 (который является STDERR).
STDOUT - это файловый дескриптор 1, и когда вы выполняете перенаправление без ключа >
, предполагается 1>
.
Если по какой-то причине вы хотитечтобы использовать разные файлы для перенаправления двух потоков, вы можете сделать:
python ./test.py >stdout.txt 2>stderr.txt
Если вы хотите перенаправить оба файла в один и тот же файл:
python ./test.py >all.txt 2>&1 # POSIX
или
python ./test.py &>all.txt # `bash`-ism (works in other advanced shells as well)