用默认值预初始化raw_input

我有一个“表单”,我有几个raw_input来获得用户响应。

现在我想让它们用默认值进行预初始化。 有什么办法来填补这些raw_input字段? 或者有没有一个很好的替代raw_input哪里有可能?

澄清一下,我看起来像这样:

 val = raw_input("Input val:") 

我想要的输出是以下内容:

 Input val: default value 

我希望用户能够删除或编辑默认值,就好像他们自己写了一样。 有没有办法做到这一点?

你可以像这样设置raw_input()这样如果用户没有输入任何东西(只是输入),该值将被设置为“my_default”:

 i = raw_input("Input Something[my_default]:") or "my_default" 

编辑::关于你的问题更新,正如在评论中指出,你不能有使用raw_input()这种用户交互。

raw_input不像web表单。 名字应该放弃:所有的功能是接受原始输入(以字符串的形式),可选地首先打印提示。 如果你想要一个默认值,你需要自己设置,就像在Elizion的答案中一样 。


现在,说,你可以破解输入提示看起来有点像你想要的。 我完全不建议这样做 ,但为了完整起见,请在交互式控制台中尝试以下代码:

 default_val = 'default' i = raw_input('Input val: {}\rInput val: '.format(default_val)) or default_val 

在这里我滥用\r字符将光标移回到提示的开头。 然后我重写实际的提示部分,将光标留在d字符上,以便用户可以键入“覆盖”它。

你会注意到,虽然"default"仍然显示在那里,直到你输入了所有的内容(在这一点上,它可能会消失,取决于你的控制台的行为)。 但它只是显示 ; 实际上不是输入的一部分。 如果用户输入"foo" (这将使提示看起来像这样: Input val: fooult ), i会得到"foo"的值。 如果用户只是在不输入文本的情况下按Enter键 ,那么i将是空字符串,这就是为什么代码中仍然需要or default_val 。 所有这一切都是说, 这几乎肯定不是你想要做的。 如果你想要一个网页表单,请制作一个网页表单。 raw_input (并且就此而言,控制台I / O)不是为此而做的。

我实际上在Google搜索之后找到了一个答案。 使用readline模块时,可以使用raw_input完成,如下所示:

 import readline def pre_input_hook(): readline.insert_text('DefaultValue') readline.redisplay() readline.set_pre_input_hook(pre_input_hook) while True: line = raw_input('Prompt ("stop" to quit): ') if line == 'stop': break print 'ENTERED: "%s"' % line 

或者,根据jonrsharpe的评论 ,将其全部包装在一个更容易处理的函数中:

 import readline DEFAULT_TEXT = '' def default_hook(): """Insert some default text into the raw_input.""" readline.insert_text(default_hook.default_text) readline.redisplay() readline.set_pre_input_hook(default_hook) def raw_input_default(prompt, default=None): """Take raw_input with a default value.""" default_hook.default_text = DEFAULT_TEXT if default is None else default return raw_input(prompt)