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来实现吗?sys.argv可以处理可选参数吗?
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来实现吗?sys.argv可以处理可选参数吗?
只需使用的sys.argv
if len(sys.argv) == 2:
# do X
else:
# do Y
您可以简单地检查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
但没有办法专门拉eur_hedge中的值,而不会抛出一个需要更多/太多变量来解压缩参数? – Felix 2012-02-25 07:58:54
不,没有办法做到这一点,除非你想将它转换为函数调用并使用类似'def main(script,lira_cbt,eur_hedge = None)'和'main(* sys.argv)'这样的东西我绝对不会这样做。 – 2012-02-25 08:00:57
如果这是要的不是扔掉的脚本的详细部分,可以考虑使用argparse http://docs.python.org/library/argparse.html
目前,它会更加复杂,但它会帮助你保持记录的程序接受的选项和也提供有用的错误消息,而不像 “解包太多值”,用户可能不理解。
如果我可以建议另一种方法:
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
虽然这可能会奏效,但使用像'argparse'这样的模块来完成这个任务将会更容易,更麻烦。 – YSelf 2017-12-15 23:39:10
@YSelf我不是在讨论更简单/更传统的解决方案。只是回答原来的问题。 – 2017-12-16 19:07:22
如果CLI获取复杂的,(如果你坚持一些旧版本或'optparse')你或许应该开始使用'argparse'。 – delnan 2012-02-25 10:01:13