【问题标题】:Python: pre-specify response to raw_input [duplicate]Python:预先指定对 raw_input 的响应
【发布时间】:2014-05-20 05:06:42
【问题描述】:

是否可以在程序中预先指定对一系列 raw_input 问题的响应?

如果在我的程序中某处我有:

response = raw_input("Enter something: ")

我可以在程序开始之前指定我想在命令行中输入“某物”吗?

【问题讨论】:

  • 什么意思?你的问题很模糊。有人可以从您的问题中得出多种解释。请澄清
  • 什么是“某物”
  • 您的意思是,您希望您的程序支持命令行选项?也许看看optparse 或如何使用sys.argv
  • 我不确定这里有什么困惑。 OP 希望它看起来好像有人坐下来并在您不看时键入字符串 something,只要您到达 raw_input 提示符。

标签: python


【解决方案1】:

要在提示用户时实现默认值,只需检查响应是否为空 - 并设置您的默认值。这是典型的显示方式:

value = raw_input('Would you like to continue? [Y/n]: ')

如果没有设置值,大写字母表示默认值,n是用户可以输入的可选值:

value = raw_input('Would you like to continue? [Y/n]: ')

# Set the default to 'Y'
if not len(value.strip()):
     result = 'Y'
else:
     result = value

【讨论】:

    【解决方案2】:

    据我了解,您希望您的程序立即显示如下内容:

    输入一些东西:something _

    (其中 _ 是 shell 的插入符号)

    因此,如果您按 Enter,raw_input 将返回字符串“something” - 或者您可以按 Backspace 并编辑预填充的输入。


    简单的答案是,你不能这样做。问题在于,此时不是 Python 处理输入 - 它是您的 shell(bash、cmd 等)。只有在您输入内容并按 Enter 后,输入才会“传递”回 Python。

    readline 这样的库将允许你想要的东西,但只适用于与 readline 链接的 Python 版本(通常是 Linux)。请参阅this answer 了解更多信息。


    许多程序使用的另一种方法是在提示后显示默认值,如果没有给出输入,则假定默认值。这个函数应该模仿这种行为:

    def raw_input_default(prompt, default):
        result = raw_input('{0} [{1}] '.format(prompt, default))
        if result == '':
            result = default
        return result
    

    用法:

    >>> print raw_input_default('Enter name:', 'Joe')
    Enter name: [Joe] John
    John
    >>> print raw_input_default('Enter name:', 'Joe')
    Enter name: [Joe]
    Joe
    

    【讨论】:

    • 如果这确实是作者所要求的,你可以得到非常相似的东西。请参阅this 答案。它显示了您输入的一些值,并且调整起来非常简单,因此您可以按 Enter 并让响应采用默认值。
    • @HuuNguyen 我不会说“非常相似”。例如,这不提供真正预填充解决方案所具备的编辑功能。
    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多