2010-05-04 11 views
5

Birinin konsolda sözcük yazmasını ve "sekme" tuşuna bastığında bir listeden otomatik tamamlanmasını istiyorum. Ancak, raw_input, biri [Enter] 'a gelene kadar bir dize döndürmez.Python raw_input olsun, ancak dize bittiğinde el ile karar verin

Kullanıcı [Enter] 'a gelene kadar karakterleri bir değişkede nasıl okurum?

* Not: OS sorunları nedeniyle otomatik tamamlama için import readline kullanmak istemiyorum. sys.stdin üzerinde * nix kullanım select günü

cevap

5

Unix için bu soru üzerine resmi bir SSS girdisi vardır: (Aşağıdaki Donal Fellows' açıklama kopyalanmış) http://www.python.org/doc/faq/library/#how-do-i-get-a-single-keypress-at-a-time

Düzenleme: varsayılan olarak pişmiş ‘modunda "Sorun terminali içinde olmasıdır’ (basit satır düzenlemelerine izin verir) ve tuşlara yazılanları almak için “ham” modda yerleştirilmelidir. (Teşekkürler!)

+1

Kesinlikle doğru cevap. Sorunun, terminalin varsayılan olarak “pişmiş” modda olması (basit satır düzenlemeye izin verilmesi) ve tuşlara yazılanları almak için “ham” modda yerleştirilmesi gerektiği şeklinde düzenleme yapmak isteyebilirsiniz. Ve bu noktada, sorucu aynı zamanda kötü yazım ve OS'nin genellikle onlar için yaptığı diğer şeyler hakkında endişelenmek zorundadır. –

1

yılında, bir karakter için daha sonra .read() beklemenin., Windows msvcrt.kbhit() ve msvcrt.getch() kullanmak On.

+0

Bu çözüm hakkında ayrıntılı bilgi verir misiniz? Seçme modülünü bilmediğim için onu uygulayamadım…:/​​ – EOL

+0

@EOL: "Alışılmadık" ne anlama geliyor? Belki de (1) bir kod yazmalısın, o zaman (2) bu kodla ilgili herhangi bir sorun hakkında ayrı bir soru sormalısınız. –

+0

@ S.Lott: Aşağıdaki kod ilk karakteri yakalamaz, ancak enter tuşuna basana kadar bekler: 'import select, sys; char = select.select ([sys.stdin], [], []) [0] [0] .read (1); yazdırma "% s oku"% char'. Belki de bu, 'select' modülüne aşina olmadığımdan ve onu nasıl kullanacağımı bilmemekten kaynaklanmaktadır. :) – EOL