2012-06-20 53 views
3

我想能夠指定一個選項作爲我的程序,既充當一個標誌,也充當變量。例如: 我有一個名爲「--logging」的參數。如果沒有指定這個參數,我希望它被設置爲false(即action ='store_true'),但是如果指定了參數,我想要做兩件事。 1)我想設置一個默認路徑「./log_file.log」和2)我想允許用戶指定一個不同的日誌文件位置。Python argparse結合了一個標誌和變量

回答

-1

是的沒有問題。您可以使用此表中的出色PyMOTW about argparse

import argparse  
parser = argparse.ArgumentParser() 


parser.add_argument('--logging', action='store_true', default=False, 
        dest='logging_on', 
        help='Activate the logging') 

results = parser.parse_args() 

解釋您可以使用logging_on測試和輸出值後來在你的代碼(由什麼是有道理的,你更換)。您還可以使用配置文件或/和文件日誌路徑的參數。

+0

這並不能解決我的問題。我不僅希望將其設爲真/假標誌,還要允許其保留默認值或自定義值。我在下面解決了我自己的問題! – Calcipher

+0

@Calcipher啊很​​酷。標記爲已解決。 – karlcow

6

對,所以我想出了自己的解決方案。它依賴於nargs。下面是代碼第一:

#!/usr/bin/python 
# example.py 
import argparse 

parser = argparse.ArgumentParser(description="Example of a single flag acting as a boolean and an option.") 
parser.add_argument('--foo', nargs='?', const="bar", default=False) 
args = parser.parse_args() 

if args.foo: 
    print args.foo 
else: 
    print "Using the default, boolean False." 

鑑於例如,下面是當我們在三種可能的情況下使用它會發生什麼:

> ./example.py 
    Using the default, boolean False. 
> ./example.py --foo 
    bar 
> ./example.py --foo baz 
    baz 

希望上面是不言自明。如果不是,那麼發生的是那個nargs ='?'如果沒有指定標誌(在我們的例子中是boolean False),將使用'default'值,如果該標誌被指定爲不帶參數,則使用const值,如果標誌使用參數指定,則使用參數。注意不要在False附近引用任何引號; False是內置類型(布爾型),「False」或「False」將評估爲true。