在命令行程序中需要获取命令行参数可以使用sys库和argparse库。sys库可用于处理简单的命令行参数,argparse库可用于处理复杂的命令行参数。
# argparse 解析命令行参数import argparse, sysdef main():# 定义一个ArgumentParser实例:参数分别为程序名、描述、说明信息parser = argparse.ArgumentParser(prog="test", description="test", epilog="version 1.01")# 定义位置参数,help指定帮助信息:parser.add_argument("path", help="路径")# 定义关键字参数:parser.add_argument("--host", default="localhost")# type指定参数必须为int类型,default指定参数可缺省,缺省时值为3306:parser.add_argument("--port", default="3306", type=int)# 此参数允许用户输入简写,required指定参数必需输入:parser.add_argument("-u", "--user", required=True)parser.add_argument("-p", "--password", required=True)# nargs指定接收的参数个数parser.add_argument("--lt", type=str, nargs=3)# choices指定参数值必需为选项中的一个parser.add_argument("--ch", type=str, choices=["cp", "de"])# action='store_true'指定参数不跟参数值,出现表示Trueparser.add_argument("--st", action="store_true", required=False)# 解析参数:如果参数有问题,则它打印出错误信息后,结束进程;如果参数是-h,则它打印帮助信息后,结束进程。args = parser.parse_args()# 打印参数:print("argparse parsed args:", args)if __name__ == "__main__":print("sys argv:", sys.argv)main()
py test.py
sys argv: ['learn-argparse.py']
usage: test [-h] [--host HOST] [--port PORT] -u USER -p PASSWORD [--lt LT LT LT] [--ch {cp,de}] [--st] path
test: error: the following arguments are required: path, -u/--user, -p/--password
py test.py -u root -p hello --lt a b c --ch cp /path
sys argv: ['learn-argparse.py', '-u', 'root', '-p', 'hello', '--lt', 'a', 'b', 'c', '--ch', 'cp', '/path']
argparse parsed args: Namespace(path='/path', host='localhost', port=3306, user='root', password='hello', lt=['a', 'b', 'c'], ch='cp', st=False)
py test.py -u root -p hello --lt a b c --ch cp --st /path
sys argv: ['learn-argparse.py', '-u', 'root', '-p', 'hello', '--lt', 'a', 'b', 'c', '--ch', 'cp', '--st', '/path']
argparse parsed args: Namespace(path='/path', host='localhost', port=3306, user='root', password='hello', lt=['a', 'b', 'c'], ch='cp', st=True)