Python 命令行传参
# 1、通过sys.argv获取
sys_argv_demo.py
import sys
def main():
print(sys.argv)
if __name__ == '__main__':
main()
# python sys_argv_demo.py Peter 18
# ['sys_argv_demo.py', 'Peter', '18']
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 2、使用argparse模块
argparser_demo.py
import argparse
def main(args):
print(args)
print(args.name, args.age)
if __name__ == '__main__':
args_parser = argparse.ArgumentParser('My argument parser')
args_parser.add_argument('--name', '-n', type=str, help='Your name')
args_parser.add_argument('--age', '-a', default=18, type=int, help='Your age')
args = args_parser.parse_args()
main(args)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
-h
输出帮助信息:
# python argparser_demo.py -h
usage: My argument parser [-h] [--name NAME] [--age AGE]
optional arguments:
-h, --help show this help message and exit
--name NAME, -n NAME Your name
--age AGE, -a AGE Your age
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
传参:
# python argparser_demo.py -n Peter --age 18
Namespace(age=18, name='Peter')
Peter 18
1
2
3
2
3
# 3、使用click模块
click_demo.py
import click
@click.command()
@click.option('--name', type=str, help='Your name')
@click.option('--age', default=18, type=int, help='Your age')
def main(name, age):
print(name, age)
if __name__ == '__main__':
main()
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
--help
输出帮助信息:
# python click_demo.py --help
Usage: click_demo.py [OPTIONS]
Options:
--name TEXT Your name
--age INTEGER Your age
--help Show this message and exit.
1
2
3
4
5
6
7
2
3
4
5
6
7
传参:
# python click_demo.py --name Peter --age 18
Peter 18
1
2
2
# 总结
sys.argv
是python最基础的获取命令行参数的方法,它返回一个列表,其中第一个元素是脚本的文件名。这种方式的缺点很明显,无法指定参数的名称,必须按照固定顺序传参,没有帮助信息。- 其实argparse和click模块都是对
sys.argv
的封装,都可以指定参数名,不需要按顺序,还可以输出帮助信息。