代码之家  ›  专栏  ›  技术社区  ›  abhinav singh

无法分析Python中的命令行参数

  •  0
  • abhinav singh  · 技术社区  · 9 年前

    我正在尝试创建一个脚本,该脚本接受命令行参数,并根据输入调用相关函数。 下面是我的主函数的样子:

    from lib.updatefeed import gather
    #stdlib imports
    import argparse
    
    
    
    def main():
        print "test"
        parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
        parser.add_argument('-ip', type=str, nargs='+', help="Search for a single IP")
    
        parser.add_argument('-list', type=str, nargs='?', help="Search for a list of IP")
        parser.add_argument('-update', type=str, nargs='?', help='Update the local storage')
        args = parser.parse_args()
        if args.ip:
            if len(args.ip) > 4:
                print "Too many"
                sys.exit(1)
            parse_ip(args.ip)
        if args.list:
            parse_ipList(list)
        if args.update:
            print "updating"
            gather()
    
    if __name__ == '__main__':
        main()
    

    所有其他参数工作正常,并且正在调用相应的函数。唯一的问题是“update”参数。 出于某种原因 gather() 传递-update参数时,函数未被调用。我还在函数调用之前添加了一个print语句,但也没有打印出来。

    有人能帮我找出根本原因吗。

    下面也是我的收集函数的一部分:

    def gather(self):
        if not os.path.exists('New'):
            os.mkdir('New')
        print "Starting feed update process"
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   rici    9 年前
    parser.add_argument('-update', type=str, nargs='?', help='Update the local storage')
    

    声明选项 -update 作为一个可选参数( nargs='?' ); 选项的值将是参数(如果提供)或 default 钥匙但是,您没有提供 违约 键和默认值 违约 None .

    所以如果您只提供命令行选项 -更新 如果没有参数,则 args.update 没有一个 ,以及测试:

    if args.update:
            print "updating"
            gather()
    

    会失败,所以什么都不会做。

    显然,你只关心 -更新 存在于命令行中,因此它不应接受任何参数。要处理这种情况,请将选项定义为具有操作 store_true ,并省略 type nargs 参数:

    parser.add_argument('-update', action='store_true', help='Update the local storage')