2012-02-16 109 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()