Forked from MichaelScript/Custom debug print for entire python environment
Created
February 27, 2018 21:59
-
-
Save unux/57b99a3c5bb57753b612dd648b72e421 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import site | |
import os | |
import pathlib | |
# Big thanks to Match on StackOverflow for helping me with this | |
# see https://stackoverflow.com/a/48713998/5614280 | |
# This is some cool hackery to overwrite the default functionality of | |
# the builtin print function within you're entire python environment | |
# to display the file name and the line number as well as always flush | |
# the output. It works by creating a custom user script and placing it | |
# within the user's sitepackages file and then overwriting the builtin. | |
# You can disable this behavior by running python with the '-s' flag. | |
# We could probably swap this out by reading the text from a python file | |
# which would make it easier to maintain larger modifications to builtins | |
# or a set of files to make this more portable or to modify the behavior | |
# of more builtins for debugging purposes. | |
customize_script = """ | |
from inspect import getframeinfo,stack | |
def debug_printer(func): | |
# I made this so that output always gets flushed as it won't by default | |
# within the environment I'm running it in. Also it will print the | |
# file name and line number of where the print occurs | |
def debug_print(*args,**kwargs): | |
frame = getframeinfo(stack()[1][0]) | |
return func(f"{frame.filename} : {frame.lineno} ", flush=True,*args,**kwargs) | |
return debug_print | |
__builtins__['print'] = debug_printer(print) | |
""" | |
# Creating the user site dir if it doesn't already exist and writing our | |
# custom behavior modifications | |
pathlib.Path(site.USER_SITE).mkdir(parents=True, exist_ok=True) | |
custom_file = os.path.join(site.USER_SITE,"usercustomize.py") | |
with open(custom_file,'w+') as f: | |
f.write(customize_script) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment