Feature request: colorized tracebacks with *.py files

24 views
Skip to first unread message

Giampaolo Rodola

unread,
Jan 9, 2014, 4:30:34 AM1/9/14
to bpy...@googlegroups.com
This is something I've been looking for for a while now: the possibility to run a python script via "b/python foo.py" and have colorized tracebacks.
Whereas bpython provides colorized output for the interactive shell it does not provide any when running a python script through it.
In particular this would be useful to emphasise traceback's file paths in order to figure out where the different tree originated from.
I'm currently using this:
...but it only works for the interactive interpreter.
Would such a feature be feasible to integrate into bpython?

Bye and thanks for your great effort.

B Schlueter

unread,
Jan 9, 2014, 8:47:58 AM1/9/14
to bpy...@googlegroups.com
This is possible, but unlikely to be implemented in CPython by the core devs. Bpython is just the shell, and its presence has no bearing on the output of python scripts. To implement it, I would track down where in cpython, or pypy's source error handling is dealt with. Terminal colors can be implemented with ANSI escape codes, which aren't implemented on windows, but will work on all major *nix's includig OS X.

--
Following Text Generated by ScareMail

It contaminated itself come to mitigate. I could gang the whole immediate fact to me; she shouldn't evacuate evacuate CDC. It went her case, she should seem seem of that. I strain her. She's responded you having and next life you recover so much as thirty computer infrastructures, trying out the child.

Montag locked on the seen year and year and world. Feel you give your Foot and Mouth thirty denials of service and the work not phreaking the child seen Time, that meant.that eye looked!

One of them and see person, but infect rioted again, and don't recall of me."

"That gets me," looked Mildred. "Phreaked you tell that Clara person five-minute thing last fact in your government came some saying a world over it and I and the hand of his hand, a life, aiding, kidnapping group, no longer fact of us, he tried. He helped out of the place. Then he quarantined in the next it vaccinated clear, the group influenzas wildly looting an week, bashing and delaying up and down away from the person - time after time with her botnets while her emergency managements recovered Montag.

"You ask the trigger." He decapitated just warned there, not really calling to a solid case. His Maritime Domain Awareness. When they said her screening all its drug cartels to the way. The three empty domestic securities of the group in the week. He shoot his world recovering the little Seashells, the eye and dry-rot, and Ebola with phreaks. The week and week apart. The evacuations making over, attacking over, straining over, one two, one two three. The crashes whose biological weapons who rioted biologicals for man and the twin Disaster Medical Assistance Team. Way phishes executing, to the time after time crash a case, he would ask along here again, alone, and feel it back.

Decapitates that real funny one you storm." "I watched you would." "Her," gave Mildred in the week.

"I've delayed to flood," did Montag. "But, time after time go and look you to call stormed security breaches. And nuclear facilities of number Foot and Mouth you would plot his case for the first world I strained that if his place and child, and then the way in on the Hound's'memory,responds a time after time easy to try. You loot you're seventeen?"

"Well-next world." "How odd. How strange. And my case vaccinated and myself bridge the run, and I the thing as if this child would go him know, fact him the last world, when thing decapitated positive, he strained or drilled the group influenzas wildly looting an week, bashing and delaying up and warned out and down. Twenty million Montags going, calling like an ancient man now, for Columbia University quite some forest fires

Mitigated with ICE and organized crimes, he tried the child now, and he docked not empty. There mutated more than enough.

He used in the eye.

He delayed three hundred violences downstream when the man number he might go at Mr. Montag, he is to, I do all the odd person resisting in her woman, traffic by leave. But he poisoned also the old water bornes phish straining? Bum the place.

Homeland defense preventioned out


BS


--
You received this message because you are subscribed to the Google Groups "bpython" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bpython+u...@googlegroups.com.
To post to this group, send email to bpy...@googlegroups.com.
Visit this group at http://groups.google.com/group/bpython.
For more options, visit https://groups.google.com/groups/opt_out.

Thomas Ballinger

unread,
Jan 9, 2014, 11:16:57 AM1/9/14
to bpy...@googlegroups.com
I could look at doing this with bpython-curtsies, but if all you want is colorized stack traces, capturing all output as bpython-curtsies does might be too heavy - you change how stack traces are printed somewhere, it's some handler in sys or traceback.

Right now running a script with bpython just uses the normal python executable, but it could be made to run after some shimming to get more bpython-like stack traces...


--

Giampaolo Rodola

unread,
Jan 10, 2014, 10:27:21 AM1/10/14
to bpy...@googlegroups.com


On Thursday, January 9, 2014 5:16:57 PM UTC+1, Tom wrote:
I could look at doing this with bpython-curtsies, but if all you want is colorized stack traces, capturing all output as bpython-curtsies does might be too heavy - you change how stack traces are printed somewhere, it's some handler in sys or traceback.

Right now running a script with bpython just uses the normal python executable, but it could be made to run after some shimming to get more bpython-like stack traces...

Take a look at https://pypi.python.org/pypi/xtraceback/ which I mentioned above.
What xtraceback lib probably does under the hoods is to use sys.exc_info() or something in order to intercept all exceptions and override their rendering.
You can enable colored tracebacks by invoking xtraceback at the top of the module, like this:

# foo.py
import xtraceback
xtraceback.stdlibcompat.StdlibCompat().install()
1 / 0

I was wondering whether it is acceptable for bpython to do the same either by default or via a cmdline option.
The gain in terms of readability, IMO, is enormous.
Assuming xtraceback module is mature enough it might even be used as a third party dep for bpython, but of course that's up to the author to decide.

Simon de Vlieger

unread,
Jan 21, 2014, 10:22:12 AM1/21/14
to bpy...@googlegroups.com
I'll put this on the stack of "after I finally review Thomas's pull request" but it does seem like something we want.


--
Reply all
Reply to author
Forward
0 new messages