Python脚本速查手册(一)

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)

你可能感兴趣的:(Python,服务器,linux,python)