Coding养成--Python(20)

#The diary of a Python learner

Date:26.03.2025

目录

#The diary of a Python learner

Focus:argparse

Key:

1.

2.

3.

Practice:

2.

Difficulty?

Addition:



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:

一般位置参数放在最后,关键字参数要有开头索引

参考:简介 - Python教程 - 廖雪峰的官方网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值