On Thursday, May 28, 2015 at 4:30:22 AM UTC-4, Bob Farrell wrote: > > Hi Rocky (awesome name, by the way), > > Take a look at the bpdb/ directory in the root of the project directory: > https://github.com/bpython/bpython/tree/master/bpdb > <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fbpython%2Fbpython%2Ftree%2Fmaster%2Fbpdb&sa=D&sntz=1&usg=AFQjCNGCFTnT6wLU1FR2Nwh1aExY6GHtLg> > > If I've understood you correctly this should be a working example of what > you're looking for. It looks like you're more than familiar with pdb so > hopefully this should be a breeze for you. > > Let us now how you get on ! >
Ok. I took a look at https://github.com/bpython/bpython/tree/master/bpdb <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fbpython%2Fbpython%2Ftree%2Fmaster%2Fbpdb&sa=D&sntz=1&usg=AFQjCNGCFTnT6wLU1FR2Nwh1aExY6GHtLg>. Although I didn't run that code, something that makes no sense to me is how instance variables (self) in the BPdb class get picked up by bpython. Specifically, self.prompt, and self.intro. That definitely didn't work for me and so I wound up setting sys.ps1 for the prompt and passing the "banner" parameter to bpython.embed(). And even if self.intro works, (does it?) passing it as a parameter to embed() seems a lot more straightforward and less magical. So that's the stuff I could figure out. Now onto the I can't. The first problem I have is getting out of bpython. It seems to close sys.stdout. It does this even if inside bpython if I run "raise SystemExit", "raise SystemError", quit() or enter Ctrl-D (EOF). So how can I get out of bpython without it closing stdout? The second problem I encounter is in running callbacks into the debugger such as for listing files, changing frames for evaluation and so on. I get no output, unless I add a gratuitous print('') statement. And even then I am getting line feeds (\n) without a carriage return. What's going on there? The last problem is a more minor. embed() has a parameter to set locals, but none to set globals. I suppose I could fold or put all globals variables into the local scope. But aside from being ugly and potentially time consuming, it's semantically wrong. The specific code I have so far is https://github.com/rocky/python2-trepan/blob/master/trepan/processor/command/bpy.py but I'd appreciate it if you'd try it out . I think all of the things I've mentioned above will be clear. Instructions for installing from git are https://github.com/rocky/python2-trepan/wiki/How-to-Install . To run, assuming bpython is already installed, just type: $ trepan2 myscript.py (trepan2) bpython trepan2 python shell with locals Use dbgr(*string*) to issue debugger command: *string* trepan2 >>> As you say, since you are familiar with bpython hopefully this will be a breeze for you. Cheers, Rocky > Cheers, > > On Thursday, 28 May 2015 09:24:25 UTC+1, Rocky Bernstein wrote: >> >> I have recently been beefing up support of the python trepan debugger >> <https://pypi.python.org/pypi?name=trepan&:action=display> to go into >> both a python and ipython shell. In doing that I came across bpython. >> >> How does one embed a bpython shell from inside another Python program >> such as a debugger? >> >> Here are some issues that come up: >> >> >> 1. Setting evaluation (locals, globals) to be in the context of the >> debugged program >> 2. Saving/restoring command history >> 3. Saving/restoring command completion functions >> >> To get a sense of how this is done for ipython and python see >> https://github.com/rocky/python2-trepan/blob/master/trepan/processor/command/ipython.py >> >> and >> https://github.com/rocky/python2-trepan/blob/master/trepan/processor/command/python.py >> > -- 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/bpython. For more options, visit https://groups.google.com/d/optout.
