2022年 11月 4日

Python——命令行传参

                                      Python——命令行传参

 

       Python 提供了 getopt 模块来获取命令行参数,也可以使用 sys 的 sys.argv 来获取命令行参数。本文介绍2种方式进行命令行传参。

 

1、sys.argv传参——初级

  • sys.argv 是命令行参数列表。
  • len(sys.argv) 是命令行参数个数。

注:sys.argv[0] 表示脚本名。 

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. import sys
  4. print('参数个数为:', len(sys.argv), '个参数。')
  5. print('参数列表:', str(sys.argv))

运行结果

  1. $ python test.py arg1 arg2 arg3
  2. 参数个数为: 4 个参数。
  3. 参数列表: ['test.py', 'arg1', 'arg2', 'arg3']

sys.argv:以列表的方式获取运行 Python 程序的命令行参数存放其中。其中 sys.argv[0] 通常就是指该 Python程序本身,sys.argv[1] 代表第一个参数,sys.argv[2] 代表第二个参数,以此类推。类似于 Shell 中的 $0、$1、$2

 

2、argparse传参——高级

argparse的使用可以简化为以下四个步骤:

  • A. import argparse                                       # 在python文件中先导入该模块
  • B. parser = argparse.ArgumentParser()    # 创建一个解析对象
  • C. parser.add_argument()                           # 添加该解析对象中的参数和对应的命令表示
  • D. parser.parse_args()                                 # 调用解析方法

demo如下:

  1. import argparse
  2. import time
  3. def parse_args():
  4. description = "你正在学习如何使用argparse模块进行命令行传参..."
  5. parser = argparse.ArgumentParser(description=description)
  6. parser.add_argument("-t", "--time", type=str, default=time.strftime("%Y%m%d", time.localtime()), help="%Y%m%d格式的时间")
  7. parser.add_argument("--query", type=str, default="welcome to argparse!", help="传入的文本")
  8. return parser.parse_args()
  9. if __name__ == "__main__":
  10. args = parse_args()
  11. print(args)
  12. print(type(args))
  13. print(args.time, args.query)

运行结果:

  1. Namespace(query='welcome to argparse!', time='20210612')
  2. <class 'argparse.Namespace'>
  3. 20210612 welcome to argparse!

命令行运行结果

  1. $ python parse.py -h
  2. Namespace(query='welcome to argparse!', time='20210612')
  3. <class 'argparse.Namespace'>
  4. 20210612 welcome to argparse!
  5. $ python parse.py
  6. Namespace(query='welcome to argparse!', time='20210612')
  7. <class 'argparse.Namespace'>
  8. 20210612 welcome to argparse!
  9. $ python parse.py -t 20210610 --query 我想吃饭
  10. Namespace(query='我想吃饭', time='20210610')
  11. <class 'argparse.Namespace'>
  12. 20210610 我想吃饭