#!/usr/bin/env python # coding: utf-8 # trigger font-config errors by making `$HOME/.fontconfig` not writable # In[1]: get_ipython().system('ls -la $HOME') get_ipython().system('fc-cache') # importing weasyprint triggers font-config errors: # In[2]: import weasyprint # repeated imports don't trigger module load, so no repeated output: # In[3]: import weasyprint # but we can trigger fcinit again # In[4]: from weasyprint.text.fonts import fontconfig fontconfig.FcInitLoadConfigAndFonts(); # (restart kernel) # # using `wurlitzer.pipes()` suppresses output during import: # In[1]: import wurlitzer with wurlitzer.pipes(): import weasyprint # (restart kernel) # # importing fontconfig submodule triggers output because `import weasyprint` is implied any time a submodule is imported # In[1]: import sys from weasyprint.text.fonts import fontconfig 'weasyprint' in sys.modules # `import weasyprint` does nothing because it's already been run # In[2]: import weasyprint # In[3]: fontconfig.FcInitLoadConfigAndFonts(); # In[4]: import wurlitzer with wurlitzer.pipes(): fontconfig.FcInitLoadConfigAndFonts(); # (restart kernel) # # the example in https://github.com/minrk/wurlitzer/issues/92 # In[1]: import sys import wurlitzer from weasyprint.text.fonts import fontconfig sys.stderr.flush() print("after import") with wurlitzer.pipes(): fontconfig.FcInitLoadConfigAndFonts(); # Running a second time produces no output, because the output was produced by the import: # In[2]: import sys import wurlitzer from weasyprint.text.fonts import fontconfig sys.stderr.flush() print("after import") with wurlitzer.pipes(): fontconfig.FcInitLoadConfigAndFonts(); # (restart kernel) # # same example, also capturing output for the import: # In[1]: import wurlitzer with wurlitzer.pipes(): from weasyprint.text.fonts import fontconfig with wurlitzer.pipes(): fontconfig.FcInitLoadConfigAndFonts();