2011-08-18 14 views
8

Python'u öğrenmeye başladım ve pratik/eğlence için kendi sekme tamamlama işlevimi yazıyorum (böylece kimse bize rlcompleter söylemiyor). Aslında python'u işleve çağırması için biraz sorun yaşıyorum. Kodum:Python: Bir işlevi bir tuşa bağla

import readline 
def tab_completer(): 
    print readline.get_line_buffer() 

readline.parse_and_bind("tab: tab_completer") 
while True: 
    raw_input("Prompt") 

beklenen çıkışı ben sekme tuşuna vurduğunda ben yazmışsınız hiç baskı ne olacağını ise, bu aslında, herhangi bir tavsiye ne olduğunu değil ne kadar şimdiye kadar?

+0

Gerçekte neler olduğunu ayrıntılandırmanız gerekir. –

+0

Hiçbir şey olmuyorsa, bir şey sekme düğmesine bağlıdır (çünkü artık sekmeler değil), ancak işlevi çalıştırmaz. Tüm bu olanlar geçersiz bir tuşa bastığım gibi ses duyuyorum. – Trcx

cevap

2

bu deneyin:

import readline 

def tab_completer(text, state): 
    print "\ntext:", text 

readline.parse_and_bind("tab: complete") 
readline.set_completer(tab_completer) 
raw_input('Prompt: ') 

soru Tab completion in Python's raw_input() (benim referans olduğu) de yardımcı olabilir.

+0

Bunu sadece bir dakika içinde deneyeceğim. – Trcx

+0

Mükemmel çalıştı! Teşekkür ederim. Sadece bir soru, readline.set_completer (tab_completer) satırını neden kullanmanız gerekiyor? Parse_and_bind sözdiziminin ": " – Trcx

+1

olduğunu tahmin ediyorum: 'un basılan tuşun adı olduğuna ve GNU okuma hattı rutini olduğuna inanıyorum. Parse_and_bind() satırı, SEKME tuşuna basıldığında GNU okuma hattını kendi "tam" rutinini çağırması talimatını verir. Set_completer satırı, bu rutin tarafından çağrılan Python rutinini belirtir. SEKME: Bu örnekte, http://www.gnu.org/s/bash/manual/html_node/Sample-Init-File.html#Sample-Init-File dosyasının ": "sözdizimi GNU okuma çizgisine özgüdür. –