2012-02-16 168 views
2

我正在嘗試檢索Python腳本(2.7在Windows下)的可選命令行參數,但事情並不順利。的代碼是:Python中的可選命令行參數

parser = argparse.ArgumentParser(description = 'Process display arguments') 
parser.add_argument('-t', nargs = '?', default = 'baz') 
args = parser.parse_args(['-t']) 
print args.t 

如果我運行「program.py」,沒有參數,args.t打印爲無。 如果我運行「program.py -t」,args.t被打印爲無。 如果我運行「program.py -t foo」,args.t被打印爲無。

爲什麼我沒有從命令行獲取值到args.t?

回答

4

不要將['-t']傳遞給parse_args。只要這樣做:

args = parser.parse_args() 

您傳遞給parse_args的任何參數都用來代替命令行。所以有了這個論點,你使用的命令行並不重要,argparse從來沒有看到它。

+0

現在,'-h'也可以工作!我認爲當例子從「print parser.parse_args(['-t']」到在腳本中實際使用它時,我感到困惑 – 2012-02-16 19:25:18

1

使用const keyword argument

import argparse 
parser = argparse.ArgumentParser(description = 'Process display arguments') 
parser.add_argument('-t', nargs = '?', const = 'baz', default = 'baz') 
args = parser.parse_args() 
print args.t 

運行它產生:

% test.py   # handled by `default` 
baz 
% test.py -t  # handled by `const` 
baz 
% test.py -t blah 
blah 
+0

這在文檔中有解釋:請注意,對於可選參數, - 選項字符串是存在的,但後面沒有命令行arg,在這種情況下,將生成const的值。 – jcollado 2012-02-16 19:25:52

2

args = parser.parse_args(["-t"]) 

正在通過命令行參數[ 「-t」]給解析器。你想使用實際的命令行參數,所以將行改爲

args = parser.parse_args()