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.

Reply via email to