Я хотел бы, чтобы stdout и stderr были перенаправлены в тот же файл, в то время как stderr все еще записывает на экран. Какой самый питонический способ сделать это?Перенаправление stdout, stderror в файл, в то время как stderr все еще печатает на экран
ответ
Я предполагаю, что вы хотите перенаправить stdout текущего сценария и stderr, а не какой-то подпроцесс, который вы используете.
Это не звучит как очень вещий, что нужно сделать в первую очередь, но если вам нужно, решение Pythonic будет:
- Перенаправление
stdout
в файл. - Переадресовать
stderr
в специальный файл-подобный объект, который записывает в файл, а также записывает в реальныйstderr
.
Что-то вроде этого:
class Tee(object):
def __init__(self, f1, f2):
self.f1, self.f2 = f1, f2
def write(self, msg):
self.f1.write(msg)
self.f2.write(msg)
outfile = open('outfile', 'w')
sys.stdout = outfile
sys.stderr = Tee(sys.stderr, outfile)
Лучше всего, чтобы use the python logging framework для отправки сообщений в обоих местах, а не на самом деле перенаправляет стандартный вывод/STDERR. В качестве менее пифонической альтернативы, you could make a custom file-like object that's write method will write to both sys.__stdout__
and your file и присвойте sys.stdout свой пользовательский объект. Затем вы сделаете то же самое для stderr. См. documentation for the sys module
Нет, у вас все еще есть 'stderr' для записи на экран. (Не говоря уже о 'sys .__ stdout__' и' sys .__ stderr__'.) И, конечно же, вы всегда можете сохранить исходный 'stdout' перед перенаправлением. – abarnert
Он также хочет перенаправить stderr. Вы правы насчет sys.stdout vs sys .__ stdout__, я обновлю свой ответ, чтобы включить это: – ErlVolton
Да, он хочет перенаправить stderr, чтобы он записывал в файл и в реальный 'stderr'. И абсолютно ничего не мешает ему сделать это; Я не знаю, почему вы думаете, что это будет проблемой. Между тем, он не хочет, чтобы 'stdout' шел на экран, только в файл, так почему вы объясняете, как это сделать? – abarnert
- 1. Redirect Nashorn stdout и stderror
- 2. Перенаправление bash stdout/stderr в два места?
- 3. Как перенаправить как stdout, так и stderr в файл И все еще выводить ТОЛЬКО stderr?
- 4. Перенаправление stdout и stderr в файл, не работающий на raspbian
- 5. Перенаправление STDERR и STDOUT в макрос DOSKEY
- 6. Basic Перенаправление STDERR STDOUT в Баш
- 7. Перенаправление stdout и stderr в файл в C++
- 8. Перенаправление stderr и stdout в Bash
- 9. Перенаправление STDOUT и STDERR в сценарий оболочки
- 10. Перенаправление вывода как stdout, так и stderr?
- 11. Завершение stderr и перенаправление сообщения на stdout
- 12. Linux stdout stderr перенаправление в файл: отличается от вывода терминала
- 13. Остановить запись tomcat на stdout и stderror
- 14. Как перенаправить stdout и stderr в файл, показывая stderr на экран?
- 15. Перенаправление STDERR в STDOUT, а затем в файл
- 16. Перенаправление STDOUT/STDERR в файл под UNIX C++ - опять
- 17. Перенаправление вывод на экран в текстовый файл
- 18. Как перенаправить 'stdout' в 'stderr' и 'stderr' в 'stdout'?
- 19. Как Перенаправление Python Stderr в строку Хотя все еще Отображение
- 20. fprintf()/std :: cout не печатает часть строки в stdout/stderr
- 21. Напишите STDOUT & STDERR в файл журнала, также напишите STDERR на экран
- 22. Перенаправление родной dll stdout/stderr изнутри C#
- 23. Python: subprocess.call, stdout в файл, stderr в файл, отображение stderr на экране в реальном времени
- 24. Java: программа stdout и stderr для какого-то обработчика
- 25. Redirect stdout, stderr, cout, cerr для файла, а также экран
- 26. - как stderror, так и stdout, напечатанные на экране?
- 27. Перенаправление STDOUT и STDERR не в надлежащем порядке
- 28. Перенаправление STDERR в временный файл
- 29. Объединить несколько stdout/stderr в один stdout
- 30. Команда Bash, которая печатает сообщение на stderr
Вы имеете в виду текущую программу или подпроцесс? – abarnert
@abarnert yes, текущая программа, а не подпроцесс –