Код, который вы разместили выше, должен работать.Скорее всего, проблема в том, что вы проверяете файл, пока поток еще открыт.При использовании open()
вам всегда нужно как-то закрыть поток.Пока вы не сделаете это, изменения в файле не будут видны вам при проверке его другим способом (например, открытием файла вручную).
В этом примере вы можете сделать это либо переназначивsys.stdout
и sys.stderr
или вызовом close()
(предпочтительный метод, поскольку он более явный и предполагаемый способ обработки потоков) для них, например: sys.stdout.close()
.
Также имейте в виду, чтоесли вы будете открывать и закрывать их несколько раз, лучше использовать "a"
для добавления к файлу, а не переписывать содержимое постоянно.
РЕДАКТИРОВАТЬ: Вы спрашивали вкомментарии об обработке ошибок при выполнении таких действий.Метод, который вы предложили, верен, вы можете try/except
части кода и except
закрыть поток.
import sys
sys.stderr = open("e.txt", "a")
try:
import nonexistingmodule
print 'Should not be printed out'
except:
print 'Should be printed out'
sys.stderr.close()
Этот код выше позволяет вам проверить, что был запущен исключающий путь.