Python 命令行参数分配给变量
Posted
技术标签:
【中文标题】Python 命令行参数分配给变量【英文标题】:Python command line argument assign to a variable 【发布时间】:2014-03-08 21:24:51 【问题描述】:我必须将命令行参数存储在变量中或为其分配默认值。
我正在尝试的是下面
import sys
Var=sys.argv[1] or "somevalue"
如果我没有指定任何参数,我会收到错误 out of index。如何解决?
【问题讨论】:
也许使用更结构化的方法,见***.com/questions/1009860/… @Barmar:原则上是的,但在这种情况下这有点过头了,你不觉得吗? 也许吧。我们没有看到完整的上下文。 【参考方案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)
【讨论】:
以上是关于Python 命令行参数分配给变量的主要内容,如果未能解决你的问题,请参考以下文章
Python Argparse:获取用于命名空间变量的命令行参数