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实现吗?
答案 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
:
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