Рубрики
Без рубрики

WXPYPHON – перенаправить Stdout / Stderr

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Новые программисты начинают использовать Python и WxPython каждую неделю. Так что следует, что каждые несколько месяцев я вижу, как люди спрашивают, как перенаправить stdout к wx.textctrl on comp.lang.python или списка рассылки wxpython. Поскольку это такой общий вопрос, я думал, что я бы написал об этом статью. Регулярные читатели узнают, что я упомянул эту концепцию до предыдущего поста.

Обновлено 2015-10-06.

Первоначально я думал, что нам нужно создать класс, который может Утка типа Написание API WX.TextCTRL. Обратите внимание, что я использую так называемый «Новый стиль» класс что подклассы объект (см. код ниже).

Обратите внимание, что в этом классе есть только один метод (помимо метода инициализации, конечно). Это позволяет нам писать текст от STDOUT или STDERR в текстовое управление. Следует отметить, что Написать Метод не безопасен. Если вы хотите перенаправить текст из потоков, то измените оператор записи, как это:

Теперь давайте копать в код WXPYPHON, нам понадобится:

В указанном выше коде я создаю многострочный элемент управления только для чтения и кнопку, единственной целью которой является напечатайте некоторые текст на STDOUT. Я добавляю их в Boxsizer, чтобы держать виджеты от укладки друг на друга и лучше образовать изменение размера кадра. Затем я создал экземпляр класса RedirectText, передав его экземпляром моего управления текстовым управлением. Наконец, я установил STDOUT в экземпляр RediectText, редир (то есть).

Если вы также хотите перенаправить STDERR, то просто добавьте следующее справа после того, как «:

улучшения могут быть сделаны для этого, а именно цвета кодирования (или предварительно ожидаемого), какие сообщения от STDOUT и которые находятся из СтДерра, но я ‘ Оставь это как упражнение для читателя.

Недавно было указано мне, что мне не нужно прыгать через все эти обручи. Вместо этого вы можете просто перенаправить stdout непосредственно на виджет TextCtrl, потому что он имеет свой собственный Написать Метод. Так вот пример:

Вы отметите, что код выше больше не ссылается на RedirectText класс, потому что нам это не нужно. Я уверен, что если вы хотите Используйте темы, делая это таким образом, не будет безопасным потоком. Вам нужно будет переопределить метод записи TextCtrl аналогичным образом, как ранее было упомянуто, чтобы сделать его безопасным. Особое спасибо идет в Карандрауг для указывающего это мне.

Связанные чтение

  • Python: Беговая пинг, Traceroute и больше

Скачать источник

  • RedirectText.py