2013-04-12 32 views
7

Tôi đã cố gắng để có được TAB để làm điều gì khác hơn là chèn tab trong khi tại dấu nhắc (pdb).Tự động hoàn thành và phím tab trong PDB

Điều tôi lưu ý là kích hoạt tự động hoàn thành như trong here hoặc here, nhưng phím tab không làm bất kỳ điều gì khác ngoài việc thêm tab vào pdb.

Vì vậy, với:

 
(pdb)var + tabKeyPressed 

Tôi muốn để có được:

 
(pdb)variable 

thay vì:

 
(pdb)var[   ] 
+0

Nó dường như đã được một cái gì đó với cài đặt Python của tôi, trong một máy tính khác nhau cả hai liên kết khép kín làm việc giống như một nét duyên dáng. –

Trả lời

4

iPython là giải pháp của bên thứ ba cho sự cố này. Đôi khi bạn chỉ có thể dựa vào vanilla Python. Tôi tìm thấy 2 giải pháp cho nó.

Per-shell giải pháp - sử dụng mô-đun '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 
>>> 

System-rộng giải pháp - tập tin sử dụng ~/.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 
>>> 

Ghi chú:

  1. Chỉ được thử nghiệm lần thứ e Python 3.4

  2. OS - Linux Mint

  3. Dựa trên https://reminiscential.wordpress.com/2009/06/12/python-enable-auto-complete-in-a-pdb-session/

7

ipdb để giải cứu.

IPdb xuất khẩu chức năng để truy cập debugger IPython, có tính năng tab hoàn, nổi bật cú pháp, tracebacks tốt hơn, tốt hơn mẫn với giao diện tương tự như các mô-đun pdb.

+1

Tôi đã thử nó một lúc, và nó đã giao hàng. Tôi không thích lắm. –

Các vấn đề liên quan