如何设置raw_input的默认string?

我正在使用python2.7的raw_input从标准input读取。

我想让用户更改给定的默认string。

码:

 i = raw_input("Please enter name:") 

安慰:

 Please enter name: Jack 

用户应该被提供Jack但可以改变(退格)到别的东西。

Please enter name:参数将是raw_input的提示,该部分不应该由用户更改。

你可以这样做:

 i = raw_input("Please enter name[Jack]:") or "Jack" 

这样,如果用户只是按下回车而没有input任何东西,“我”将被分配“杰克”。

在dheerosaur的答案如果用户按Enter键select默认值在现实中它不会被保存为python认为它是''string扩展了一些dheerosaur。

 default = "Jack" user_input = raw_input("Please enter name: %s"%default + chr(8)*4) if not user_input: user_input = default 

Fyi ..退格的ASCII value08

Python2.7得到raw_input并设置一个默认值:

把它放在一个名为a.py的文件中:

 import readline def rlinput(prompt, prefill=''): readline.set_startup_hook(lambda: readline.insert_text(prefill)) try: return raw_input(prompt) finally: readline.set_startup_hook() default_value = "an insecticide" stuff = rlinput("Caffeine is: ", default_value) print("final answer: " + stuff) 

运行程序,停止并向用户显示:

 el@defiant ~ $ python2.7 a.py Caffeine is: an insecticide 

游标结束时,用户按退格键,直到“杀虫剂”消失,键入其他内容,然后按回车键:

 el@defiant ~ $ python2.7 a.py Caffeine is: water soluable 

程序如此完成,最终答案得到用户input的内容:

 el@defiant ~ $ python2.7 a.py Caffeine is: water soluable final answer: water soluable 

相当于上面的,但在Python3中工作:

 import readline def rlinput(prompt, prefill=''): readline.set_startup_hook(lambda: readline.insert_text(prefill)) try: return input(prompt) finally: readline.set_startup_hook() default_value = "an insecticide" stuff = rlinput("Caffeine is: ", default_value) print("final answer: " + stuff) 

更多信息在这里发生了什么:

https://stackoverflow.com/a/2533142/445131

在使用readline平台上,您可以使用此处所述的方法: https : //stackoverflow.com/a/2533142/1090657

在Windows上,您可以使用msvcrt模块:

 from msvcrt import getch, putch def putstr(str): for c in str: putch(c) def input(prompt, default=None): putstr(prompt) if default is None: data = [] else: data = list(default) putstr(data) while True: c = getch() if c in '\r\n': break elif c == '\003': # Ctrl-C putstr('\r\n') raise KeyboardInterrupt elif c == '\b': # Backspace if data: putstr('\b \b') # Backspace and wipe the character cell data.pop() elif c in '\0\xe0': # Special keys getch() else: putch(c) data.append(c) putstr('\r\n') return ''.join(data) 

请注意,箭头键不适用于Windows版本,使用时不会发生任何事情。

我只是添加这个,因为你应该写一个简单的函数重用。 这是我写的一个:

 def default_input( message, defaultVal ): if defaultVal: return raw_input( "%s [%s]:" % (message,defaultVal) ) or defaultVal else: return raw_input( "%s " % (message) ) 

试试这个: raw_input("Please enter name: Jack" + chr(8)*4)

backspace的ASCII值是08