#The diary of a Python learner
Date:26.03.2025
目录
#The diary of a Python learner
Focus:argparse
Focus:
Key:
函数 | 功能 |
sys.argv | 解析命令行参数 |
parse_args | 解析命令行参数 |
1.sys.argv
内置参数列表。可直接传入。
# copy.py
import sys
print(sys.argv)
source = sys.argv[1]
target = sys.argv[2]
python copy.py source.txt copy.txt
得到
['copy.py', 'source.txt', 'copy.txt']
2.parse.args
使用argparse解析参数,只需定义好参数类型,就可以获得有效的参数输入,能大大简化获取命令行参数的工作。
详情参考廖老师的例子,如下
Practice:
1.编写一个备份MySQL数据库的命令行程序,需要输入的参数如下:
- host参数:表示MySQL主机名或IP,不输入则默认为
localhost
; - port参数:表示MySQL的端口号,int类型,不输入则默认为
3306
; - user参数:表示登录MySQL的用户名,必须输入;
- password参数:表示登录MySQL的口令,必须输入;
- gz参数:表示是否压缩备份文件,不输入则默认为
False
; - outfile参数:表示备份文件保存在哪,必须输入。
其中,outfile
是位置参数,而其他则是类似--user root
这样的“关键字”参数。
# backup.py
import argparse
def main():
# 定义一个ArgumentParser实例:
parser = argparse.ArgumentParser(
prog='backup', # 程序名
description='Backup MySQL database.', # 描述
epilog='Copyright(r), 2023' # 说明信息
)
# 定义位置参数:
parser.add_argument('outfile')
# 定义关键字参数:
parser.add_argument('--host', default='localhost')
# 此参数必须为int类型:
parser.add_argument('--port', default='3306', type=int)
# 允许用户输入简写的-u:
parser.add_argument('-u', '--user', required=True)
parser.add_argument('-p', '--password', required=True)
parser.add_argument('--database', required=True)
# gz参数不跟参数值,因此指定action='store_true',意思是出现-gz表示True:
parser.add_argument('-gz', '--gzcompress', action='store_true', required=False, help='Compress backup files by gz.')
# 解析参数:
args = parser.parse_args()
# 打印参数:
print('parsed args:')
print(f'outfile = {args.outfile}')
print(f'host = {args.host}')
print(f'port = {args.port}')
print(f'user = {args.user}')
print(f'password = {args.password}')
print(f'database = {args.database}')
print(f'gzcompress = {args.gzcompress}')
if __name__ == '__main__':
main()
输入有效的参数,则程序能解析出所需的所有参数:
$ ./backup.py -u root -p hello --database testdb backup.sql
parsed args:
outfile = backup.sql
host = localhost
port = 3306
user = root
password = hello
database = testdb
gzcompress = False
缺少必要的参数,或者参数不对,将报告详细的错误信息:
$ ./backup.py --database testdb backup.sql
usage: backup [-h] [--host HOST] [--port PORT] -u USER -p PASSWORD --database DATABASE outfile
backup: error: the following arguments are required: -u/--user, -p/--password
更神奇的是,如果输入-h
,则打印帮助信息:
$ ./backup.py -h
usage: backup [-h] [--host HOST] [--port PORT] -u USER -p PASSWORD --database DATABASE outfile
Backup MySQL database.
positional arguments:
outfile
optional arguments:
-h, --help show this help message and exit
--host HOST
--port PORT
-u USER, --user USER
-p PASSWORD, --password PASSWORD
--database DATABASE
-gz, --gzcompress Compress backup files by gz.
Copyright(r), 2023
2.
# -*- coding: utf-8 -*-
import
Difficulty?
Addition:
一般位置参数放在最后,关键字参数要有开头索引