我必須將命令行參數存儲在變量中,或者爲其分配默認值。將Python命令行參數分配給變量
我想做的是低於
import sys
Var=sys.argv[1] or "somevalue"
我收到錯誤出指數的,如果我不指定任何參數。如何解決這個問題?
我必須將命令行參數存儲在變量中,或者爲其分配默認值。將Python命令行參數分配給變量
我想做的是低於
import sys
Var=sys.argv[1] or "somevalue"
我收到錯誤出指數的,如果我不指定任何參數。如何解決這個問題?
Var=sys.argv[1] if len(sys.argv) > 1 else "somevalue"
很好的一行,我幾個星期前纔開始使用這種'perl-like'方法。 – bjd2385
好問題。
我認爲最好的辦法是做
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
與下面的模板運行./your_script.py
和您的修改上面打印{'var': 'somevalue'} []
有關命令行處理模板的示例,請參閱中的示例代碼像Pythonista:地道的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)
的內置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」)'?看到我的答案。 – wolfrevo
也許用更structur編輯的方法,請參閱http://stackoverflow.com/questions/1009860/command-line-arguments-in-python?rq=1 – Barmar
@Barmar:原則上是的,但這對這種情況是矯枉過正,你不覺得嗎? –
也許吧。我們沒有看到完整的背景。 – Barmar