Description
It would be very advantageous if one could easily discern whether or not the execution environment is bpython.
For example, in IPython, the REPL environment sets a global variable __IPYTHON__
to True
. This allows for trivial tests like e.g.:
try:
__IPYTHON__
except NameError:
in_ipython = False
else:
in_ipython = True
Contrastingly, I just tried to programmatically figure out if my script was running in bpython or not, and the experience was… wanting. I tried the following three rubrics:
BPYTHON = type(sys.stdout).__module__.startswith('bpython')
BPYTHON = 'bpython' in sys.argv[0]
BPYTHON = '__console__' in sys.modules
The first two methods work in the interactive REPL but don’t work in code loaded using the -i
flag – presumably because it runs both before sys.stdout
and friends have been wrapped, and before sys.argv
has been mutated. The last method does seem to work, but it feels extremely janky and fragile and I don’t trust it to survive the next volley of bpython internals-refactoring.
So: can we get an officially-sanctioned method of determining that bpython is our host? That would be amazing, assuredly. It’s a great REPL, I use it every day – this’d make it even more betterer. Indeed!