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
时也没有指定所有其他参数。什么是布莱恩'上?
答案 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:])
如果您愿意。