Python 命令行解析
所谓“命令行参数”就是:在命令行中执行文件的时候同时给该文件传递一些参数。
命令行参数是参数化程序执行的一种常见且简单的方法,下面主要介绍几种常见的获取和解析命令行参数的方法。
1. argv
import sys import os if __name__ == "__main__": if len(sys.argv) < 3: logger.error("Usage: python3 main.py [workspace directory] [task flow]") exit(-1) else: workspace_directory = sys.argv[1] task_flow = int(sys.argv[2]) exit(0)2. getopt
一种简单的命令行解析方法
# !/usr/bin/python3 # coding: utf-8 import sys import getopt try: opts, args = getopt.getopt(sys.argv[1:], "i:o:f:D:") except getopt.GetoptError: sys.exit(2) for opt, arg in opts: if opt == '-i': # do something elif opt == '-o': # do something elif opt == '-f': # do something elif opt == '-D': # do something else: # do nothing3. argparse
一种复杂的命令行解析方式
import argparse def parse_args(): parser = argparse.ArgumentParser(description="extractor data!") parser.add_argument('input_file', type=str, help="path to image (png, jpeg, etc.)") parser.add_argument('--record_path', type=str, default='', help='Extracted file absolute path') parser.add_argument('--save_path', type=str, default='', help='Extraced file') parser.add_argument('-p', '--path', help='The path to search for files', required=True, dest='path') args = parser.parse_args() return args if __name__ == '__main__': args = parse_args() print(args.record_path)注意,其中有三种写法:
- 不带杠
在上述示例中,input_file就是一个不带-前缀的参数。运行脚本时,直接在命令行中指定该参数的值,例如:
python script.py file.txt运行之后input_file的值就是file.txt
- 单杠
单杠后面只能接一个字母
python script.py -p /path/data/- 双杠
双杠后面可以接多个字母
python script.py --path /path/data/