Я запускаю Python 3.5 под Windows 10, и я использую matplotlib.pyplot
для создания PGF-файлов, которые я использую для использования в LaTeX.Подпроцесс Python вызывает в Matplotlib на Windows
Я запускаю интерфейсный интерфейс пользователя, который предоставляет параметры конфигурации конечного пользователя, а затем совершает вызовы в matplotlib.pyplot.savefig()
, который генерирует и сохраняет изображение.
У меня есть проблема в том, что matplotlib
бэкенд используется (backend_pgf.py
) делает subprocess.Popen()
вызов, который заставляет окно консоли Windows (CMD), чтобы всплывал, чтобы сделать необходимую обработку LaTeX. Визуально это отвлекает пользователя и должно быть скрыто.
Вот этот фрагмент кода:
latex = subprocess.Popen([str(self.texcommand), "-halt-on-error"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
cwd=self.tmpdir)
То, что я хочу сделать, это предотвратить это консольное окно с отображением. Я знаю, что могу использовать subprocess.STARTUPINFO() для установки dwFlags и предотвращения отображения этого окна консоли (или передать shell=True
).
Я мог бы переопределить класс, о котором идет речь, но этот класс глубоко вложен в другие классы и модули, поэтому вы можете себе представить сложность управления базой кода для простого изменения функции.
Мой вопрос заключается в том ... , как сделать это изменение в логически глубокий пакет какmatplotlib?
Спасибо много.
Rich
** Обучение весело. ** Спасибо за это. Я вообще не знал об исправлениях обезьян (концепция имеет смысл для динамических языков). Для тех, кто не знаком, подробнее см. [Обезьяна-исправление (ссылка SO)] (https://stackoverflow.com/questions/5626193/what-is-a-monkey-patch). Обратите внимание, что с любой хорошей концепцией к ней следует относиться с осторожностью. – richbl