2010-05-04 24 views
5

Tôi muốn một người nào đó nhập các từ trong bảng điều khiển và tự động điền từ danh sách khi họ nhấn phím "tab". Tuy nhiên, raw_input sẽ không trả lại chuỗi cho đến khi ai đó truy cập [Enter].Python nhận raw_input nhưng tự quyết định khi nào chuỗi được thực hiện

Làm cách nào để đọc các ký tự thành biến cho đến khi người dùng nhấn [Enter]?

* Lưu ý: Tôi không muốn sử dụng import readline để tự động hoàn thành do sự cố hệ điều hành.

Trả lời

5

Có một mục Hỏi đáp chính thức về vấn đề này, cho Unix: http://www.python.org/doc/faq/library/#how-do-i-get-a-single-keypress-at-a-time

Sửa (sao chép từ bình luận Donal Fellows' dưới đây): "Vấn đề là các thiết bị đầu cuối là trong‘’chế độ nấu theo mặc định (cho phép chỉnh sửa dòng đơn giản) và để lấy các khóa khi chúng được nhập, nó phải được đặt ở chế độ "thô". " (Cảm ơn!)

+1

Chắc chắn là câu trả lời đúng. Bạn có thể muốn chỉnh sửa trong đó vấn đề là thiết bị đầu cuối ở chế độ "nấu" theo mặc định (cho phép chỉnh sửa đường đơn giản) và để lấy các khóa khi chúng được nhập, nó phải được đặt ở chế độ "thô". Và vào thời điểm đó, người hỏi cũng phải lo lắng về việc gõ nhầm và những thứ khác mà hệ điều hành thường làm cho họ. –

1

On * nix sử dụng select trên sys.stdin phải chờ một nhân vật, sau đó .read() nó trong. Trên Windows sử dụng msvcrt.kbhit()msvcrt.getch().

+0

Bạn có thể giải thích kỹ về giải pháp này không? Tôi không thể triển khai nó, không quen thuộc với mô-đun được chọn…:/ – EOL

+0

@EOL: "Không quen thuộc" nghĩa là gì? Có lẽ bạn nên (1) viết một số mã sau đó (2) hỏi một câu hỏi riêng biệt về bất kỳ vấn đề cụ thể bạn có với mã đó. –

+0

@ S.Lott: Đoạn mã sau không bắt ký tự đầu tiên, nhưng đợi cho đến khi nhập được nhấn: 'import select, sys; char = select.select ([sys.stdin], [], []) [0] [0] .read (1); in "Đọc% s"% char'. Có lẽ điều này là do thực tế là tôi không quen với mô-đun 'select', và không biết cách sử dụng nó. :) – EOL

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