Python命令行参数指定给变量

Python命令行参数指定给变量,python,logic,command-line-arguments,Python,Logic,Command Line Arguments,我必须将命令行参数存储在变量中,或者为其指定默认值 下面是我正在尝试的 import sys Var=sys.argv[1] or "somevalue" 如果我没有指定任何参数,我将从索引中获取错误。如何解决这个问题?好问题 Var=sys.argv[1] if len(sys.argv) > 1 else "somevalue" 我认为最好的解决办法是 try: var = sys.argv[1] except IndexError: var = "somevalu

我必须将命令行参数存储在变量中,或者为其指定默认值

下面是我正在尝试的

import sys
Var=sys.argv[1] or "somevalue"
如果我没有指定任何参数,我将从索引中获取错误。如何解决这个问题?

好问题

Var=sys.argv[1] if len(sys.argv) > 1 else "somevalue"
我认为最好的解决办法是

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

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

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
内置模块正是为了完成以下任务:

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或更早版本,并且不希望在上添加需求,您可以手动执行类似的操作,例如:

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

也许可以使用一种更结构化的方法,见@Barmar:原则上是的,但对于这种情况来说,这太过分了,你不觉得吗?也许吧。我们看不到完整的上下文。为什么不直接添加选项('--var',default=“somevalue”)?看到我的答案了。很好的一行代码,我几周前才开始使用这种类似perl的方法。