Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的可选命令行参数_Python_Command Line Arguments_Argparse - Fatal编程技术网

Python中的可选命令行参数

Python中的可选命令行参数,python,command-line-arguments,argparse,Python,Command Line Arguments,Argparse,我试图为Python脚本(Windows下的2.7)检索可选的命令行参数,但事情进展得并不顺利。代码是: parser = argparse.ArgumentParser(description = 'Process display arguments') parser.add_argument('-t', nargs = '?', default = 'baz') args = parser.parse_args(['-t']) print args.t 如果我在没有参数的情况下运行“pro

我试图为Python脚本(Windows下的2.7)检索可选的命令行参数,但事情进展得并不顺利。代码是:

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?

不要传递
['-t']
来解析参数。只要做:

args = parser.parse_args()
将使用传递给parse_args的任何参数,而不是命令行。因此,对于该参数,无论您使用什么命令行,argparse都不会看到它。

使用:

运行它会产生:

% test.py          # handled by `default`
baz
% test.py -t       # handled by `const`
baz
% test.py -t blah
blah
线路

args = parser.parse_args(["-t"])
正在将命令行参数[“-t”]传递给解析器。您希望使用实际的命令行参数,因此将该行更改为

args = parser.parse_args()

现在'-h'也可以工作了!当示例从“print parser.parse_args(['-t'])移动到脚本中实际使用它时,我想我感到困惑。文档中对此进行了解释:注意,对于可选参数,还有一种情况-选项字符串存在,但后面没有命令行arg。在这种情况下,将生成const的值。
args = parser.parse_args()