在Python输入中显示编辑时的默认值可行吗?

87 投票
17 回答
45092 浏览
提问于 2025-04-15 20:57

Python是否可以接受这样的输入:

Folder name: Download

但是用户不是输入“Download”,而是这个值一开始就已经存在。如果用户想把它改成“Downloads”,他只需要加一个‘s’然后按回车。

使用普通的输入命令:

folder=input('Folder name: ')

我得到的只是一个空白的提示:

Folder name:

有没有我遗漏的简单方法可以做到这一点?

17 个回答

12

这个在Windows系统上可以正常运行。

import win32console

_stdin = win32console.GetStdHandle(win32console.STD_INPUT_HANDLE)

def input_def(prompt, default=''):
    keys = []
    for c in unicode(default):
        evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
        evt.Char = c
        evt.RepeatCount = 1
        evt.KeyDown = True
        keys.append(evt)

    _stdin.WriteConsoleInput(keys)
    return raw_input(prompt)

if __name__ == '__main__':
    name = input_def('Folder name: ')
    print
    print name
23

我猜你是指从命令行输入的内容。我从来没见过命令行提示符的初始值,通常它们的格式是:

Folder [default] : 

在代码中,这其实很简单:

res = raw_input('Folder [default] : ')
res = res or 'default'

另外,你也可以试试用Python里的curses模块来做一些事情。

94

标准库里的 input()raw_input() 函数没有这个功能。如果你在使用Linux系统,可以利用 readline 模块来定义一个输入函数,这个函数可以使用预设的值,并且支持更高级的行编辑功能:

import readline

def rlinput(prompt, prefill=''):
   readline.set_startup_hook(lambda: readline.insert_text(prefill))
   try:
      return input(prompt)  # or raw_input in Python 2
   finally:
      readline.set_startup_hook()

撰写回答