2013-04-12 11 views
7

Próbowałem uzyskać TAB, aby zrobić coś innego niż wstawienie karty podczas wyświetlania monitu (pdb).Klucz autouzupełniania i tabulatora w PDB

Mam na myśli wyzwalanie autouzupełniania, np. here lub here, ale klawisz tabulacji nie robi nic innego, jak dodawanie zakładek do pdb.

Więc z:

 
(pdb)var + tabKeyPressed 

chciałbym dostać:

 
(pdb)variable 

zamiast:

 
(pdb)var[   ] 
+0

Wydaje się być coś z mojej instalacji Pythona, w innym komputerze oba załączone linki pracował jak czar. –

Odpowiedz

4

iPython to rozwiązanie innej firmy dla tego problemu. Czasami można polegać tylko na Pythonie wanilii. Znalazłem 2 rozwiązania dla niego.

Per-shell rozwiązanie - wykorzystanie modułu 'rlcompleter':

$ python3 

Python 3.4.3 (default, Sep 14 2016, 12:36:27) 
[GCC 4.8.4] on linux 
Type "help", "copyright", "credits" or "license" for more information. 

>>> import pdb 
>>> pdb.set_trace() 
--Return-- 
> <stdin>(1)<module>()->None 

# press tab - but nothing 
(Pdb) str. 
*** SyntaxError: invalid syntax 
(Pdb) --KeyboardInterrupt-- 
(Pdb) c 
>>> import rlcompleter 
>>> pdb.Pdb.complete=rlcompleter.Completer(locals()).complete 
>>> pdb.set_trace() 
--Return-- 
> <stdin>(1)<module>()->None 
(Pdb) str. 
str.__add__(   str.__getattribute__( str.__name__   str.__text_signature__ str.isdigit(   str.rfind(
str.__base__(   str.__getitem__(  str.__ne__(   str.__weakrefoffset__ str.isidentifier(  str.rindex(
str.__bases__   str.__getnewargs__( str.__new__(   str.capitalize(  str.islower(   str.rjust(
str.__basicsize__  str.__gt__(   str.__prepare__(  str.casefold(   str.isnumeric(   str.rpartition(
str.__call__(   str.__hash__(   str.__qualname__  str.center(   str.isprintable(  str.rsplit(
str.__class__(   str.__init__(   str.__reduce__(  str.count(    str.isspace(   str.rstrip(
str.__contains__(  str.__instancecheck__( str.__reduce_ex__(  str.encode(   str.istitle(   str.split(
str.__delattr__(  str.__itemsize__  str.__repr__(   str.endswith(   str.isupper(   str.splitlines(
str.__dict__   str.__iter__(   str.__rmod__(   str.expandtabs(  str.join(    str.startswith(
str.__dictoffset__  str.__le__(   str.__rmul__(   str.find(    str.ljust(    str.strip(
str.__dir__(   str.__len__(   str.__setattr__(  str.format(   str.lower(    str.swapcase(
str.__doc__    str.__lt__(   str.__sizeof__(  str.format_map(  str.lstrip(   str.title(
str.__eq__(   str.__mod__(   str.__str__(   str.index(    str.maketrans(   str.translate(
str.__flags__   str.__module__   str.__subclasscheck__( str.isalnum(   str.mro(    str.upper(
str.__format__(  str.__mro__    str.__subclasses__( str.isalpha(   str.partition(   str.zfill(
str.__ge__(   str.__mul__(   str.__subclasshook__( str.isdecimal(   str.replace(   
(Pdb) c 
>>> 

Ogólnosystemowa rozwiązanie - wykorzystanie pliku ~/.pdbrc

$ cat ~/.pdbrc 
import rlcompleter 
pdb.Pdb.complete=rlcompleter.Completer(locals()).complete 
$ python3 
Python 3.4.3 (default, Sep 14 2016, 12:36:27) 
[GCC 4.8.4] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pdb 
>>> pdb.set_trace() 
--Return-- 
> <stdin>(1)<module>()->None 
(Pdb) str. 
str.__add__(   str.__getattribute__( str.__name__   str.__text_signature__ str.isdigit(   str.rfind(
str.__base__(   str.__getitem__(  str.__ne__(   str.__weakrefoffset__ str.isidentifier(  str.rindex(
str.__bases__   str.__getnewargs__( str.__new__(   str.capitalize(  str.islower(   str.rjust(
str.__basicsize__  str.__gt__(   str.__prepare__(  str.casefold(   str.isnumeric(   str.rpartition(
str.__call__(   str.__hash__(   str.__qualname__  str.center(   str.isprintable(  str.rsplit(
str.__class__(   str.__init__(   str.__reduce__(  str.count(    str.isspace(   str.rstrip(
str.__contains__(  str.__instancecheck__( str.__reduce_ex__(  str.encode(   str.istitle(   str.split(
str.__delattr__(  str.__itemsize__  str.__repr__(   str.endswith(   str.isupper(   str.splitlines(
str.__dict__   str.__iter__(   str.__rmod__(   str.expandtabs(  str.join(    str.startswith(
str.__dictoffset__  str.__le__(   str.__rmul__(   str.find(    str.ljust(    str.strip(
str.__dir__(   str.__len__(   str.__setattr__(  str.format(   str.lower(    str.swapcase(
str.__doc__    str.__lt__(   str.__sizeof__(  str.format_map(  str.lstrip(   str.title(
str.__eq__(   str.__mod__(   str.__str__(   str.index(    str.maketrans(   str.translate(
str.__flags__   str.__module__   str.__subclasscheck__( str.isalnum(   str.mro(    str.upper(
str.__format__(  str.__mro__    str.__subclasses__( str.isalpha(   str.partition(   str.zfill(
str.__ge__(   str.__mul__(   str.__subclasshook__( str.isdecimal(   str.replace(   
(Pdb) c 
>>> 

Uwagi:

  1. Testowany tylko na e Python 3.4

  2. OS - Linux Mint

  3. podstawie https://reminiscential.wordpress.com/2009/06/12/python-enable-auto-complete-in-a-pdb-session/

7

ipdb na ratunek.

ipdb funkcji eksportu dostęp do debuggera ipython, w którym znajduje zakończenie kartę, podświetlanie składni, lepsze tracebacks, lepsze introspekcję z tego samego interfejsu, co moduł PDB.

+1

Próbowałem go od jakiegoś czasu, a on dostarczył towary. Po prostu nie lubię tego. –

Powiązane problemy