使用默认值预初始化 raw_input
Pre-initialize raw_input with default value
我有一个 "form",我有一些 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
不像网络表单。这个名字应该已经暴露了:所有函数所做的就是接受原始输入(以字符串的形式),可以选择先打印提示。如果你想要一个默认值,你需要自己设置它,就像 中那样。
也就是说,您 可以 修改输入提示 看起来 有点像您想要的。 我完全不推荐这样做,但为了完整起见,请在交互式控制台中尝试以下代码:
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
的原因。所有这些都是在说 这几乎肯定不是您想要的。 如果您想要 Web 表单,请制作 Web 表单。 raw_input
(就此而言,控制台 I/O)不是为此而设计的。
经过谷歌搜索,我实际上自己找到了答案。在使用 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
或者,将其全部包装在基于 的更易于处理的函数中:
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)
我有一个 "form",我有一些 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
不像网络表单。这个名字应该已经暴露了:所有函数所做的就是接受原始输入(以字符串的形式),可以选择先打印提示。如果你想要一个默认值,你需要自己设置它,就像
也就是说,您 可以 修改输入提示 看起来 有点像您想要的。 我完全不推荐这样做,但为了完整起见,请在交互式控制台中尝试以下代码:
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
的原因。所有这些都是在说 这几乎肯定不是您想要的。 如果您想要 Web 表单,请制作 Web 表单。 raw_input
(就此而言,控制台 I/O)不是为此而设计的。
经过谷歌搜索,我实际上自己找到了答案。在使用 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
或者,将其全部包装在基于
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)