使用默认值预初始化raw_input

时间:2015-02-18 16:34:52

标签: python linux python-2.7 input

我有一个"表格"我有几个raw_input来获取用户响应。

现在我希望它们使用默认值进行预初始化。有没有办法填写这些raw_input字段?或者raw_input是否有可能替代?{/ p>

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

val = raw_input("Input val:")

我想要的输出如下:

Input val: default value

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

3 个答案:

答案 0 :(得分:3)

我实际上在谷歌搜索后发现了一个答案。使用raw_input模块时,可以使用readline进行操作,如下所示:

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's comment

的更易于处理的函数中
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)

答案 1 :(得分:2)

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

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

编辑::关于您的问题更新,正如评论中指出的那样,您无法使用raw_input()进行此类用户互动。

答案 2 :(得分:2)

raw_input与网络表单不同。名称应该放弃:所有函数都接受原始输入(以字符串的形式),可选地首先打印提示。如果您想要默认值,则需要自己设置Elizion's answer


现在,那就是说,你可以黑客输入提示看起来就像你想要的那样。 我根本不推荐这个,但为了完整起见,请在交互式控制台中尝试下面的代码:

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

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

你会注意到"default"仍然显示在那里,直到你输入所有它(此时它可能已经好了,取决于你的控制台的行为)。但它只显示; ;实际上并不是输入的一部分。如果用户输入"foo"(这会使提示符如下所示:Input val: fooult),i将获得"foo"的值。如果用户只是按 Enter 而不输入文本,i将是空字符串,这就是代码中仍然需要or default_val的原因。所有这一切都是说这几乎肯定不是你想要做的。如果你想要一个网络表单,请创建一个网络表单。 raw_input(就此而言,控制台I / O)不是为此而做的。