sys.argv可以处理可选参数吗?

时间:2012-02-25 07:49:28

标签: python

from sys import argv
script, lira_cbt, [eur_hedge] = argv

if eur_hedge == None:
    #Do x
else:
    #Do y

我希望它能够只使用lira_cbt作为参数(执行x),或者使用lira_cbt和eur_hedge(执行y)运行。可以用sys.argv实现吗?

5 个答案:

答案 0 :(得分:20)

只需使用sys.argv

的长度
if len(sys.argv) == 2:
  # do X
else:
  # do Y

答案 1 :(得分:6)

如果这不仅仅是一个抛弃脚本的一部分,请考虑使用argparse http://docs.python.org/library/argparse.html

目前它会复杂得多,但它会帮助您记录程序接受的选项,并提供有用的错误消息,而不是 用户可能不理解的“解压缩的值太多”。

答案 2 :(得分:2)

您只需检查sys.argv的长度。

if len(sys.argv) < 2:
    # Error, not enough arguments

lira_cbt = sys.argv[1]
if len(sys.argv) == 2:
    # Do X
else:
    eur_hedge = sys.argv[2]
    # Do Y

答案 3 :(得分:2)

另一种选择是使用try

从argv列表中提取值
lira_cbt = sys.argv[1]
try:
  eur_hedge = sys.argv[2]
except IndexError:
  eur_hedge = None

if eur_hedge == None:
    # Do X
else:
    # Do Y

您还可以查看getopt以获得更灵活的命令行参数解析器。

答案 4 :(得分:0)

如果我可以建议另一种方法:

from sys import argv
option_handle_list = ['--script', '--lira_cbt', '--eur_hedge']
options = {}
for option_handle in option_handle_list:
    options[option_handle[2:]] = argv[argv.index(option_handle) + 1] if option_handle in argv else None
if options['eur_hedge'] == None:
    #Do x
else:
    #Do y