我们写的 python 脚本需要修改参数,当我们将脚步上传到服务器或者给不会编程的人用时,会比较不方便,如果直接可以在外部指定参数,会非常方便,今天介绍的就是 Python 外部指定参数的几种方法。
1. 流文本处理
这种方法适用于修改一下文件中的内容,配合 linux 命令非常方便,举一个例子,我们需要从一个 binlog 文件中找到该里面最大的事物,我们要配合 mysqldump 来做:
mysqlbinlog -v --base64-output=decode-row ./mysql-bin.000001 | python check_big_event.py
2. argparse 模块
Python 自带的接收外部参数的模块,用好以后也是非常的猴赛雷。下面是一个 MySQL 自动化部署脚步,需要指定的参数有三个,我们均可以使用 --参数名 方式来指定。
parser = argparse.ArgumentParser(description='CAN signal sending tool test') #创建一个解析器parser
# parser.add_argument('-dbc','--dbcfile', type=str,action=DBC_LoadandParse, help='加载并解析dbc文件') #放入主函数流程中。为解析器添加参数
parser.add_argument('-dbc','--dbc_filename',type=str,default=config["dbc_filename"],required=False,help='which dbc_file do you want to test?')
parser.add_argument('-v','--vehicle_speed',type=int,default=config["current_speed"],required=False, help='setting vehicle speed' ) #设置当前状态
parser.add_argument('-t','--turning_switch',type=int,default=config["current_turning"],choices=[0,1,2],required=False,help='setting turning_signalswitch')
parser.add_argument('-b','--brake_switch',type=int,default=config["current_brake"],choices=[0,1],required=False,help='setting brakeswitch choices')
parser.add_argument('-g','--current_gear',type=int,default=config["current_gear"],required=False, help='setting currentgear signal')
parser.add_argument('-w','--wiper_switch',type=int,default=config["current_wiper"],choices=[0,1,2,3],required=False,help='setting wiperswitch signal')
# parser.add_argument('--sum', dest='accumulate', action='store_const',const=sum, default=max,help='sum the integers (default: find the max)')
args = parser.parse_args() #加入解析参数
print(args) #获取传入的参数
优点非常多,指定参数没有数量限制,可以设置默认,兼容性 和 扩展性非常好,生产推荐使用该方法。
3. argv 列表
这种方法非常简单直接,不需要指定参数名,直接使用下标来取参数,
指定参数时,使用空格隔开就可以,缺点是我们必须安装脚步顺序指定,如果脚本只有一个参数或者参数意义相同,可以用这种方法,参数较多不建议使用。
4. argv + argparse
argv + argparse 好处就是可以让脚本得到非常好的封装,适用于脚步参数比较多的时候。下方是一个演示:
import sys
import argparse
def parse_args():
"""parse args for test"""
parser = argparse.ArgumentParser(add_help=False)
connect_setting = parser.add_argument_group('connect setting')
connect_setting.add_argument('-h', '--host', dest='host', type=str,
help='Host the MySQL database server located', default='127.0.0.1')
connect_setting.add_argument('-u', '--user', dest='user', type=str,
help='MySQL Username to log in as', default='root')
connect_setting.add_argument('-p', '--password', dest='password', type=str, nargs='*',
help='MySQL Password to use', default='')
connect_setting.add_argument('-P', '--port', dest='port', type=int,
help='MySQL port to use', default=3306)
return parser
def command_line_args(args):
need_print_help = False if args else True
parser = parse_args()
args = parser.parse_args(args)
if args.help or need_print_help:
parser.print_help()
sys.exit(1)
return args
if __name__ == '__main__':
args = command_line_args(sys.argv[1:])
print(args.host)
参考链接:https://www.jb51.net/article/213384.htm
https://blog.csdn.net/haohulala/article/details/108972335