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