【问题标题】:Python command line argument assign to a variablePython 命令行参数分配给变量
【发布时间】:2014-03-08 21:24:51
【问题描述】:

我必须将命令行参数存储在变量中或为其分配默认值。

我正在尝试的是下面

import sys
Var=sys.argv[1] or "somevalue"

如果我没有指定任何参数,我会收到错误 out of index。如何解决?

【问题讨论】:

  • 也许使用更结构化的方法,见stackoverflow.com/questions/1009860/…
  • @Barmar:原则上是的,但在这种情况下这有点过头了,你不觉得吗?
  • 也许吧。我们没有看到完整的上下文。

标签: python logic command-line-arguments


【解决方案1】:
Var=sys.argv[1] if len(sys.argv) > 1 else "somevalue"

【讨论】:

  • 不错的单行程序,我几周前才开始使用这种“类似 perl”的方法。
【解决方案2】:

内置的argparse 模块专门用于这些类型的任务:

import argparse

# Set up argument parser
ap = argparse.ArgumentParser()

# Single positional argument, nargs makes it optional
ap.add_argument("thingy", nargs='?', default="blah")

# Do parsing
a = ap.parse_args()

# Use argument
print a.thingy

或者,如果您坚持使用 Python 2.6 或更早版本,并且不希望在 backported argparse module 上添加要求,您可以手动执行类似的操作,如下所示:

import optparse

opter = optparse.OptionParser()
# opter.add_option("-v", "--verbose") etc
opts, args = opter.parse_args()

if len(args) == 0:
    var = "somevalue"
elif len(args) == 1:
    var = args[0]
else:
    opter.error("Only one argument expected, got %d" % len(args))

print var

【讨论】:

  • 为什么不直接opter.add_option('--var', default="somevalue")?看我的回答。
【解决方案3】:

好问题。

我认为最好的解决方案是这样做

try:
    var = sys.argv[1]
except IndexError:
    var = "somevalue"

【讨论】:

    【解决方案4】:

    使用命令行处理模板尝试以下操作:

    def process_command_line(argv):
        ...
        # add your option here
        parser.add_option('--var',
            default="somevalue",
            help="your help text")
    
    def main(argv=None):
        settings, args = process_command_line(argv)
        ...
        print settings, args # <- print your settings and args
    

    使用下面的模板运行./your_script.py,上面的修改打印{'var': 'somevalue'} []

    有关命令行处理模板的示例,请参阅像 Pythonista 一样编写代码:Idiomatic Python (http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#command-line-processing) 中的示例:

    #!/usr/bin/env python
    
    """
    Module docstring.
    """
    
    import sys
    import optparse
    
    def process_command_line(argv):
        """
        Return a 2-tuple: (settings object, args list).
        `argv` is a list of arguments, or `None` for ``sys.argv[1:]``.
        """
        if argv is None:
            argv = sys.argv[1:]
    
        # initialize the parser object:
        parser = optparse.OptionParser(
            formatter=optparse.TitledHelpFormatter(width=78),
            add_help_option=None)
    
        # define options here:
        parser.add_option(      # customized description; put --help last
            '-h', '--help', action='help',
            help='Show this help message and exit.')
    
        settings, args = parser.parse_args(argv)
    
        # check number of arguments, verify values, etc.:
        if args:
            parser.error('program takes no command-line arguments; '
                         '"%s" ignored.' % (args,))
    
        # further process settings & args if necessary
    
        return settings, args
    
    def main(argv=None):
        settings, args = process_command_line(argv)
        # application code here, like:
        # run(settings, args)
        return 0        # success
    
    if __name__ == '__main__':
        status = main()
        sys.exit(status)
    

    【讨论】:

      猜你喜欢
      • 2014-08-11
      • 1970-01-01
      • 2022-11-24
      • 2016-05-05
      • 2013-10-19
      • 2021-06-11
      • 2019-10-17
      • 1970-01-01
      • 2021-03-18
      相关资源
      最近更新 更多