Python 命令解析 -argparse

应用场景

有时候我们需要替换Python脚本中不同的变量,比如进行模型选择。有时候需要提交到服务器,所以我们希望利用命令行就可以完成这一工作。比如在脚本后面添加模型参数,脚本中就可以自动改变模型。

sys.argv

sys包提供了一个简单的方法将参数返回到脚本内部,返回形式为一个列表。通常sys.argv[0]代表文件本身,后面添加的参数依次追加到sys.argv列表当中。

  1. import sys
  2. print(sys.argv)
  3. def model_choice():
  4. if sys.argv[1] == 'FCN':
  5. model = "FCN"
  6. elif sys.argv[1] == 'Unet':
  7. model = "Unet"
  8. else sys.argv[1] == 'DeepLab':
  9. model = "DeepLab"
  10. return model
  11. if __name__ == "__main__":
  12. print(model_choice)
  1. ~/Desktop/parser via 🐍 v3.7.3 via C base
  2. python sysargv.py "Unet"
  3. ['sysargv.py', 'Unet']
  4. Unet

Argparse

argparse是一个Python模块:命令行选项、参数和子命令解析器。

主要有三个步骤:

  • 创建 ArgumentParser() 对象
  • 调用 add_argument() 方法添加参数
  • 使用 parse_args() 解析添加的参数
  1. import argparse
  2. def main():
  3. parser = argparse.ArgumentParser(description="Demo of argparse")
  4. parser.add_argument("ID",type = int,help = "输入ID") # 位置参数,按照顺序赋值,必须有这个参数
  5. parser.add_argument('-n','--name', default=' Li ' ,type= str, help= "输入姓氏",choices = ['zhao','qian','sun','Li'])
  6. parser.add_argument('-y','--year', default='20',type=int, help= "输入年龄")
  7. args = parser.parse_args()
  8. print(args)
  9. name = args.name
  10. year = args.year
  11. print('Hello {} {}'.format(name,year))
  12. if __name__ == '__main__':
  13. main()
  1. python first.py -h
  2. usage: first.py [-h] [-n {zhao,qian,sun,Li}] [-y YEAR] ID
  3. Demo of argparse
  4. positional arguments:
  5. ID 输入ID
  6. optional arguments:
  7. -h, --help show this help message and exit
  8. -n {zhao,qian,sun,Li}, --name {zhao,qian,sun,Li}
  9. 输入姓氏
  10. -y YEAR, --year YEAR 输入年龄
  11. ~/Desktop/parser via 🐍 v3.7.3 via C base
  12. python first.py 13 -n "sun" -y "25"
  13. Namespace(ID=13, name='sun', year=25)
  14. Hello sun 25

更多细节操作,可以查询这篇博文!