Argparse。变量名为“args”的有趣问题

时间:2017-07-12 13:26:08

标签: python-3.x argparse

我注意到我的一个脚本没有运行,因为argparse解析器无法parse_args()。

if __name__ == "__main__":
    import argparse

    parser = argparse.ArgumentParser(description="Save a plot to file")
    parser.add_argument('input_directory', metavar='i', type=str, default='.',
                        help='The input directory')

    parser.add_argument('output_file', metavar='o', type=str,
                        help='The output filename')

    parser.add_argument('--fix', type=str, default=None,
                        help='If FIX, the txt containing fix classification results')

    args = parser.parse_args()

    import ipdb; ipdb.set_trace()

奇怪的是,我注意到问题与名为args的变量有关。我无法从该变量中检索任何信息,因为它始终返回空。 如果我将args变量的名称更改为其他任何内容,则脚本可以正常工作。

我问的是这个问题,因为我找不到任何告诉我args是关键字或其他内容的信息。

我调用了我的脚本:

python3 plotter.py --fix $(pwd)/fix.txt $(pwd) $(pwd)/plot.png

以下是有趣行为的屏幕截图:

weird

请注意包含单词args的任何语句不会返回。

关于这里可能发生什么的任何想法?

2 个答案:

答案 0 :(得分:1)

ipdb/__main__.py在其args

中设置了main
def main():
    ...
    opts, args = getopt.getopt(sys.argv[1:], 'hc:', ['--help', '--command='])

我不知道交互式运行时可见的是什么,但我怀疑自己使用args会干扰你所看到的内容

args = parser.parse_args(...)

在测试argparse时,我会定期添加

print(args)

语句。或者我在ipython会话中对其进行测试,在那里我可以查看parse_args的结果而无需进一步的工作。

答案 1 :(得分:0)

尝试使用vars()

args = vars(parser.parse_args())

然后使用

进行检索
some_val = args['some']

另请参阅此stackoverflow post