2011-12-14 32 views
24

Tôi đang sử dụng Python 3.2 trên Ubuntu 11.10 (Linux). Một đoạn mã mới của tôi trông như thế này:Có thể điền trước một đầu vào() trong Giao diện dòng lệnh của Python 3 không?

text = input("TEXT=")

Có thể nhận được một số chuỗi được xác định trước sau khi nhanh chóng, vì vậy tôi có thể điều chỉnh nó nếu cần thiết? Nó phải là như thế này:

python3 file 
TEXT=thepredefinedtextishere 

Bây giờ tôi nhấn Backspace 3 lần

TEXT=thepredefinedtextish 

Bây giờ tôi nhấn Nhập, và biến text nên thepredefinedtextish

+0

Câu trả lời ngắn gọn là không, nhưng có ràng buộc là mẹo 'curses' hoặc' readline' để thực hiện việc này. +1 cho câu hỏi. –

+0

"Nhập blargh (Mặc định: 3)" không làm những gì bạn yêu cầu, nhưng giải quyết cùng một vấn đề. –

+0

@LennartRegebro: Điều này không phục vụ chính xác mục đích tương tự. Hãy tưởng tượng người dùng được cho là nhập một danh sách các đường dẫn tìm kiếm, với một số mặc định được xác định trước. Người dùng có thể sẽ muốn bổ sung danh sách được xác định trước thay vì thay thế nó. –

Trả lời

21

Nếu thông dịch Python của bạn được liên kết với GNU readline, input() sẽ sử dụng nó. Trong trường hợp này, những điều sau đây sẽ hoạt động:

def input_with_prefill(prompt, text): 
    def hook(): 
     readline.insert_text(text) 
     readline.redisplay() 
    readline.set_pre_input_hook(hook) 
    result = input(prompt) 
    readline.set_pre_input_hook() 
    return result 
+0

Không hoạt động trên Mac OS X theo mặc định. Ngoài ra, tôi đã phải thay đổi 'input()' thành 'raw_input()' hoặc nó sẽ ném "NameError: name '* những gì tôi đã gõ *' không được định nghĩa". –

+2

@EdwardFalk Điều này không liên quan gì đến Mac OS X. Bạn đang sử dụng Python 2, trong khi câu hỏi này là về Python 3. –

+0

Ahh, bỏ lỡ phần đó. –

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