Какой лучший способ выписать и ошибка Python - PullRequest
0 голосов
/ 09 ноября 2018

Я пишу Python в Linux. Я хочу записать вывод Python и ошибки в другие файлы, чем выводить их на консоли.

Скажите, если у меня есть этот файл с питоном example.py:

print('console output')
print(1/0)

Я пробовал по-другому.
1. Выполнив следующую команду
python example.py >output 2>log
2. Обновите example.py

logf = open("./log", "w")
try:
    print('console output')
    print(1/0)
except Exception as e:
    logf.write(str(e)) 

и выполнить python example.py >output

Журналы разные. 1-й метод:

Traceback (most recent call last):
  File "try.py", line 2, in <module>
    print(1/0)
ZeroDivisionError: division by zero

и для 2-го метода:

division by zero

Итак, я хочу спросить:

  1. почему два журнала разные? И как сделать 2-й вывод таким же, как 1-й.
  2. Какой лучший способ записи ошибок в файлы? Или есть лучший способ сделать это.

Спасибо за помощь с моими вопросами.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Объединение stdout и stderr в один файл, что также полезно при использовании более (или менее) команды

python example.py 2>&1 > output
python example.py 2>&1 | more

Чтобы каждый входил в отдельные файлы

python example.py 2> error > output

Чтобы игнорировать stederr

python example 2>/dev/null

Надеюсь, это поможет.

0 голосов
/ 09 ноября 2018

Оставьте сценарий простым, оригинальным способом:

# example.py
print('console output')
print(1/0)

Используйте легкий трюк в оболочке:

$ python example.py &> log.txt

Если вам нужно другое нестандартное поведение для необработанных исключений, установите sys.excepthook.

...