Python脚本速查手册(一)

news/2024/7/5 5:09:37

Python脚本速查手册(一)

前言

Python 对于运维工程师来说,是一门必须掌握的技能。Python 是运维工程师的利器,相比于 Bash,它拥有更加完善的生态和支持,你可以使用 Python 更加简单的完成过去在Bash 当中复杂的功能。
同时,Python 也是众多运维工具的好伙伴,Ansible、SaltStack 等技术,都是基于Python 写就的,掌握了 Python ,你能给节省更多的时间,去做更重要的事情。
本手册内容主要分为以下几部分内容:

  1. Click 语法速查:使用 Click 编写 Cli 时会用到的核心语法。
  2. Python 常用运维模块:主要介绍在编写 Python 运维脚本过程中,主要使用的一些
    模块和基本用法。
  3. Python 运维脚本案例:一些实用 Python 编写的运维脚本的案例。

一、语法速查

不同类型的 Param 类型
str
字符串类型,传入参数会自动转换成字符串。
int
数字类型,传入参数会自动转换成数字。
float
浮点型,传入参数会自动转换为浮点数字。
bool
布尔值,传入参数会自动转换为布尔值。
click.File(mode=‘r’, encoding=None, errors=‘strict’, lazy=None,
atomic=False)
文件类型,传入参数会被自动以文本形式读取内容。
其中,Mode 用于设定读取的模式;
click.Path(exists=False, file_okay=True, dir_okay=True, writable=False,
readable=True, resolve_path=False, allow_dash=False, path_type=None)
路径类型,传入参数会自动以路径形式读取。
其中 exists 要求文件是否必须存在;file_okay 判断是否是文件;dir_okay 判断是否是目录;writable 判断文件是否可写;readable 判断文件是否可读;
click.Choice(choices, case_sensitive=True)
选择类型,可以用于设置选择。输入内容必须是设定的选择。

@click.command()
@click.option('--hash-type',
 type=click.Choice(['MD5', 'SHA1'], case_sensitive=False))
def digest(hash_type):
 click.echo(hash_type)

click.IntRange(min=None, max=None, min_open=False, max_open=False, clamp=False)
数字范围类型,可以设定允许的数字范围。

@click.command()
@click.option("--count", type=click.IntRange(0, 20, clamp=True))
@click.option("--digit", type=click.IntRange(0, 9))
def repeat(count, digit):
 click.echo(str(digit) * count)

click.FloatRange(min=None, max=None, min_open=False,
max_open=False, clamp=False)
浮点数字类型,用法类似 intRange。
click.DateTime(formats=None)
时间类型,传入数据需可被 Format,format 结果由参数定义。
不同类型的 Option
必选 option

@click.command()
@click.option('--n', required=True, type=int)
def dots(n):
 click.echo('.' * n)

多参数 option

@click.command()
@click.option('--pos', nargs=2, type=float)
def findme(pos):
 a, b = pos
 click.echo(f"{a} / {b}")

Flag 型 option

@click.command()
@click.option('--pos', nargs=2, type=float)
def findme(pos):
 a, b = pos
 click.echo(f"{a} / {b}")

包含提问的 option

@click.command()
@click.option('--name', prompt=True)
def hello(name):
 click.echo(f"Hello {name}!")

密码型 option

@click.command()
@click.password_option()
def encrypt(password):
 click.echo(f"encoded: to {codecs.encode(password, 'rot13')}")

不同类型的 Argument
普通 Argument

@click.command()
@click.argument('filename')
def touch(filename):
 """Print FILENAME."""
 click.echo(filename)

文件 Argument

@click.command()
@click.argument('input', type=click.File('rb'))
@click.argument('output', type=click.File('wb'))
def inout(input, output):
 """Copy contents of INPUT to OUTPUT."""
 while True:
 chunk = input.read(1024)
 if not chunk:
 break
 output.write(chunk)

文件路径 Argument

@click.command()
@click.argument('filename', type=click.Path(exists=True))
def touch(filename):
 """Print FILENAME if the file exists."""
 click.echo(click.format_filename(filename))

特殊用法
命令行输出到标准输出

import click
click.echo('Hello World!')

命令行输出彩色
以下两种方法均可:

import click
click.echo(click.style('Hello World!', fg='green'))
click.echo(click.style('Some more text', bg='blue', fg='white'))
click.echo(click.style('ATTENTION', blink=True, bold=True))

import click
click.secho('Hello World!', fg='green')
click.secho('Some more text', bg='blue', fg='white')
click.secho('ATTENTION', blink=True, bold=True)

命令行输出分页

@click.command()
def less():
 click.echo_via_pager("\n".join(f"Line {idx}" for idx in range(200)))

清空屏幕

import click
click.clear()

命令行进度条

import click
with click.progressbar(all_the_users_to_process) as bar:
 for user in bar:
 modify_the_user(user)

http://lihuaxi.xjx100.cn/news/1343029.html

相关文章

笔记本电脑的电池健康:确保长时间使用和优异性能的关键

笔记本电脑已经成为我们日常生活中不可或缺的工具,无论是办公、学习还是娱乐,我们都依赖着它的便携性和高效性能。而在所有的硬件组件中,电池健康被认为是确保长时间使用和良好性能的关键因素之一。一块健康的电池不仅能提供持久的续航时间&a…

“开放合作 共享未来”华秋联手伙伴共创硬件生态,助力物联网硬件加速创新

2023年7月11日,华秋携产品与方案亮相慕尼黑上海电子展(electronica China),并与5家生态伙伴签署硬件生态共创战略协议,通过“硬件软件供应链”的合作模式,发挥各自行业优势,共同推动电子产业的创…

Maven —— 项目管理工具

前言 在这篇文章中,荔枝会介绍如何在项目工程中借助Maven的力量来开发,主要涉及Maven的下载安装、环境变量的配置、IDEA中的Maven的路径配置和信息修改以及通过Maven来快速构建项目。希望能对需要配置的小伙伴们有帮助哈哈哈哈~~~ 文章目录 前言 一、初…

vue 页面初始化 数据处理过程

1 mounted 是初始化页面(浏览器刷新也是初始化页面),computed是更新页面数据 浏览器刷新会重新初始化页面。当我们使用 Vue.js 时,也会进行重新初始化, 重新创建 Vue.js 实例,并将原有的数据和方法重新加载到内存中。 这也是为什么在开发 Vu…

使用 SageMaker 对 Whisper 模型进行微调及部署

使用 SageMaker 对 Whisper 模型进行微调及部署 Whisper 作为 OpenAI 最新开源的自动语音识别(ASR)模型,采用了编码器-解码器(encoder- decoder)transformer架构,并使用了 68 万小时的从互联网收集的多语言…

【C语言提升】深入了解动态内存管理

目录 一、静态分配和动态分配 二、内存管理函数 1、malloc 申请堆区空间 2、calloc 申请堆区空间 3、free回收堆区空间权限 4、memset内存设置函数 5、realloc内存增减函数 三、内存泄漏(了解) 一、静态分配和动态分配 1、静态分配 在程序编译…

支付系统就该这么设计(万能通用),稳的一批!

支付永远是一个公司的核心领域,因为这是一个有交易属性公司的命脉。那么,支付系统到底长什么样,又是怎么运行交互的呢?抛开带有支付牌照的金融公司的支付架构,下述链路和系统组成基本上符合绝大多数支付场景。其实整体可以看成是…

【Linux详解】——文件系统(磁盘结构、软硬链接、动静态库)

📖 前言:本期介绍文件系统。 目录 🕒 1. 磁盘结构🕘 1.1 物理结构🕘 1.2 存储结构🕘 1.3 逻辑结构 🕒 2. 文件系统🕘 2.1 对 IO 单位的优化🕘 2.2 磁盘分区与分组&#x…