2016-02-16 57 views
-1

簡單但困擾我很長時間的問題。我有以下命令行的情況來處理:關於可選參數argparse的問題

program.py 
program.py foo 
program.py anyotherstring 

這些都是3種情況下,我不得不處理在命令行中,我會在if語句中使用它們作爲布爾低於以下。第一個只是程序本身,第二個情況下,下面的字符串必須是'foo',第三個'anyotherstring'只是意味着除'foo'之外的任何其他字符串。我感到困惑的是argparse的文檔,無法找到實現它的方法。任何人都可以提供解決方案嗎?

感謝您的回答!

+0

什麼迷惑你關於[documentation](https://docs.python.org/2/library/argparse.html),並且不會使用[sys.argv](https://docs.python.org/2/library/sys .html#sys.argv)是足夠的無論如何呢? – jsfan

+0

沒有if語句 –

+0

@StidZhang從理論上來看是非常合法的問題,但從人體工程學的角度來看它是設計不佳的命令行界面。我建議使用三個子命令'program.py base','program.py foo'和'program.py procstring ',因爲它提供了更可預測的行爲。 –

回答

1

你可以嘗試sompething這樣的:

import argparse 

parser = argparse.ArgumentParser(usage="-h for full usage") 
parser.add_argument('query', nargs='?') 
args = parser.parse_args() 
if not args.query: 
    print 'no arguments' 
elif args.query == 'foo': 
    print 'foo argument' 
else: 
    print 'random string' 
+0

正是我想要的!謝謝! –

0

而不是使用​​的,你可以嘗試docopt

"""optargs - testing optional arguments 
Usage: 
    optargs 
    optargs foo 
    optargs <somestring> 
""" 

if __name__ == "__main__": 
    from docopt import docopt 
    args = docopt(__doc__) 
    print args 

人們可以尋求幫助:

$ python optargs.py -h 
optargs - testing optional arguments 
Usage: 
    optargs 
    optargs foo 
    optargs <somestring> 

然後,調用它沒有任何參數:

$ python optargs.py 
{'<somestring>': None, 
'foo': False} 

然後用參數foo(你"foo"鍵值設爲True):

$ python optargs.py foo 
{'<somestring>': None, 
'foo': True} 

,最後用任意字符串(你"<somestring>"鍵值設爲"somstring"

$ python optargs.py somstring 
{'<somestring>': 'somstring', 
'foo': False} 
+0

謝謝回答!雖然不能在我的代碼中使用,但相當有用! –