在Python输入中显示编辑时的默认值可行吗?
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()