這是一個黑客位的,因爲它依賴於訪問sys.argv
以外的任何功能,但你可以這樣做:
import argparse
import sys
parser = argparse.ArgumentParser(description='')
parser.add_argument("-l", "--list", help="Show current running sesssions", dest="l_list", nargs='?')
args = parser.parse_args()
if args.l_list == None:
if '-l' in sys.argv or '--list' in sys.argv:
print('display all')
else:
print('display %s only' %args.l_list)
你顯然會替換爲您的實際代碼打印報表。這通過允許0或1個參數(使用nargs='?'
)工作。這允許您通過-l
或不通過參數。這意味着如果在沒有參數的情況下調用-l
或者根本不使用-l
,則args
名稱空間中的l_list
可以是None
(默認值)。然後,您可以稍後檢查是否在不帶參數的情況下調用-l
(如果l_list == None
和-l
或--list
位於sys.argv
)。
如果我將該腳本命名爲test.py
當從命令行調用它時,我會得到以下輸出。
$python test.py
$python test.py -l
display all
$python test.py -l session1
display session1 only
EDIT
我想出一個argparse唯一的解決方案!!無依託sys.argv
:
import argparse
parser = argparse.ArgumentParser(description='')
parser.add_argument("-l", "--list", help="Show current running sesssions", dest="l_list", nargs='?', default=-1)
args = parser.parse_args()
if args.l_list == None:
print('display all')
elif args.l_list != -1:
print('display %s only' %args.l_list)
所以事實證明,當參數標誌不是所有稱爲在.add_argument
的default
關鍵字才適用。如果該標誌在沒有任何後續使用的情況下使用,則無論default
關鍵字是什麼,它都將默認爲None
。因此,如果我們設置默認的東西,是不是None
,而不是預期的參數值(在這種情況下,我選擇了-1
),那麼我們就可以處理所有你的三個情況:
$ python test.py
$ python test.py -l
display all
$ python test.py -l session1
display session1 only
謝謝,這是類似解決方法 - 我有興趣,如果有一個argparse唯一的解決方案 - 謝謝。 – user7186882
@ user7186882我想出了一個唯一的方法。檢查編輯 – bunji
聰明 - 我已經嘗試了默認參數,並看到它被設置爲無,並且默認從未被使用 - 我認爲這是你的組合和默認值!謝謝! – user7186882