我有一个"表格"我有几个raw_input
来获取用户响应。
现在我希望它们使用默认值进行预初始化。有没有办法填写这些raw_input
字段?或者raw_input
是否有可能替代?{/ p>
澄清一下,我看起来像这样:
val = raw_input("Input val:")
我想要的输出如下:
Input val: default value
我希望用户能够擦除或编辑默认值,就好像他们自己编写了一样。有没有办法做到这一点?
答案 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)不是为此而做的。