Argparse没有认识到唯一的位置论证

时间:2014-10-06 21:56:24

标签: python argparse

Argparse没有认出我的位置论证。这是设置:

parser = argparse.ArgumentParser()
parser.add_argument("url")
parser.add_argument("-u", "--username")
parser.add_argument("-p", "--password")
parser.add_argument("-d", "--depth", default=sys.maxsize)
parser.add_argument("-t", "--threads", default=4)

在底部,我有这个:

if __name__ == "__main__":
    if len(sys.argv) > 1:
        print sys.argv
        args = parser.parse_args(sys.argv)
        if args.username is not None and args.password is not None:
            auth = [args.username, args.password]
        else:
            auth = None

        spider(args.url,
               basic_auth=auth,
               threads=int(args.threads),
               depth=int(args.depth))
    else:
        parser.print_help()  # Handle 0 command-line arguments

当我在staunch$ ./spiderer.py http://www.example.com/这样的命令行上调用我的脚本时,我得到了这个:

usage: spiderer.py [-h] [-u USERNAME] [-p PASSWORD] [-d DEPTH] [-t THREADS]
                   url
spiderer.py: error: unrecognized arguments: http://www.example.com/

我尝试将nargs=1添加到网址add_argument,但这不起作用。调用./spiderer.py时也没有指定所有其他参数。什么是布莱恩'上?

1 个答案:

答案 0 :(得分:4)

如果你改变了

args = parser.parse_args(sys.argv)

args = parser.parse_args()

否则parse_args将读取sys.argv[0](程序名称)作为位置参数,然后sys.argv[1]将成为意外的第二个位置参数。

您也可以致电:

args = parser.parse_args(sys.argv[1:])

如果您愿意。