Python脚本外部传参的四种常用方法:sys、argparse与argv详解
本文详细介绍Python脚本在服务器部署或共享使用时接收外部参数的四种方法。通过sys模块进行流式文本处理,利用argparse模块实现带默认值、帮助文档的标准化参数解析,使用argv列表直接通过下标获取参数,以及结合argv与argparse进行高级封装。文章包含MySQL binlog分析与自动化部署的具体代码示例,帮助开发者根据场景选择最佳方案,提升脚本的兼容性与生产环境可用性。
前言
在实际开发中,编写的Python脚本往往需要频繁修改参数。当脚本被部署到服务器或分享给不具备编程背景的用户使用时,硬编码参数会带来极大的不便。若能将参数配置移至脚本外部指定,将大幅提升使用的便捷性。本文将介绍几种在Python中实现外部参数指定的常用方法。
一、流文本处理
该方法适用于需要处理文件内容并配合Linux命令的场景。例如,我们需要从一个binlog文件中提取最大的事务信息,通常会结合mysqldump工具进行操作:
mysqlbinlog -v --base64-output=decode-row ./mysql-bin.000001 | python check_big_event.py
在此场景下,脚本仅需接收binlog文件路径作为输入。我们可以直接使用sys模块,将binlog文件以流式(逐行)方式传递给脚本,实现过程非常简洁。以下是示例脚本:
二、argparse 模块
Python内置的argparse模块是接收外部参数的标准工具,熟练运用后能极大提升脚本的专业性。以下是一个MySQL自动化部署脚本的示例,其中包含三个必须指定的参数,我们均可通过--参数名的方式在命令行中指定。
python MySQL_install.py --datadir=/data/mysql_db --basedir=/usr/local --path=mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz
以下是使用示例:当用户未指定任何参数时,脚本会自动打印帮助信息(help)。

示例格式如下:

采用这种方式传递参数,我们在运行脚本时只需按格式输入即可:
python args.py --path=xxx --log=xxx
该方法的优点显著:参数数量无限制,支持设置默认值,且具备极佳的兼容性与扩展性,强烈建议在生产环境中使用此方法。
三、argv 列表
这种方法简单直接,无需定义参数名称,直接通过下标索引即可获取参数值。演示如下:

运行结果:

指定参数时,使用空格分隔即可。其缺点在于必须严格按照脚本定义的顺序传入参数。如果脚本仅有一个参数或参数含义相同,可以使用此方法;但若参数较多,不建议使用这种方式,因为容易出错且难以维护。
四、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)
以上即为Python脚本文件外部传递参数的处理方法详细内容,更多关于Python脚本外部传递参数的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。














