python自动化运维博客_python自动化运维记录

解释器

#!/usr/bin/env python

# coding: utf-8

# -*- coding: utf-8 -*-

基础学习脚本

+加号拼接

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import getpass

name = input("Please input your name")

pwd = getpass.getpass("please input your passwd")

print("My name is" + name, "and passwd is" + pwd)

输出

# chmod +x study1.py

# pytohon study1.py

Please input your namehuang

please input your passwd

My name ishuang and passwd is123

逗号 空格分割:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import getpass

name = input("Please input your name")

pwd = getpass.getpass("please input your passwd")

print("My name is", name, "and passwd is", pwd)

输出:

# python study1.py

Please input your namehuang

please input your passwd

My name is huang and passwd is 123

格式化输出:

#!/usr/bin/env python

# coding: utf-8

name = input("please input your name: ")

age = input("please input your age: ")

job = input("please input your job: ")

msg = '''

# 默认字符串形式输出%s

Information of %s

-----------------

Name: %s

Age: %s

Job: %s

''' %(name,name,age,job)

print(msg)

输出:

# python study2.py

please input your name: huang

please input your age: 12

please input your job: engineer

Information of huang

-----------------

Name: huang

Age: 12

Job: engineer

python3中格式化输出默认接收的都是字符串,如果是数字则需要另外强制转化为init()转化为数字类型

#!/usr/bin/env python

# coding: utf-8

name = input("please input your name: ")

age = input("please input your age: ")

job = input("please input your job: ")

msg = '''

Information of %s

-----------------

Name: %s

Age: %d

Job: %s

''' %(name,name,age,job)

print(msg)

运行:

please input your name: 1

please input your age: 12

please input your job: 12

Traceback (most recent call last):

File "study2.py", line 14, in

''' %(name,name,age,job)

TypeError: %d format: a number is required, not str

报错原因: age没有转化格式为数字,导致执行代码时报错,init()转化了则不会报错

#!/usr/bin/env python

# coding: utf-8

name = input("please input your name: ")

age = input("please input your age: ")

age = int(age)

job = input("please input your job: ")

msg = '''

Information of %s

-----------------

Name: %s

Age: %d

Job: %s

''' %(name,name,age,job)

print(msg)

运行:

# python study2.py

please input your name: huang

please input your age: 12

please input your job: student

Information of huang

-----------------

Name: huang

Age: 12

Job: student

模块

sys

sys.argv 从外部向程序内部传递参数

#!/usr/bin/env python

# coding: utf-8

import sys

print(sys.argv)

print(sys.argv[0])

print(sys.argv[2])

运行:[获取执行脚本时带上的参数被获取到]

# python module_test1.py hello world

['module_test1.py', 'hello', 'world']

module_test1.py

world

#!/usr/bin/env python

import sys

for i in range(len(sys.argv)):

print('argv{0}: type is {1}, value is {2}'.format(i, type(sys.argv[i]), sys.argv[i]))

# python sys_argv.py 1 2 s

argv0: type is , value is sys_argv.py

argv1: type is , value is 1

argv2: type is , value is 2

argv3: type is , value is s

循环

while 循环

eg1

[1:] 意义:遍历,去掉列表中的第一个元素(下表为0),去后面的元素进行操作

#!/usr/bin/env python

# coding: utf-8

url = "lannister.poizon.com"

while url:

print(url)

url = url[1:]

运行:

lannister.poizon.com

annister.poizon.com

nnister.poizon.com

nister.poizon.com

ister.poizon.com

ster.poizon.com

ter.poizon.com

er.poizon.com

r.poizon.com

.poizon.com

poizon.com

oizon.com

izon.com

zon.com

on.com

n.com

.com

com

om

m

eg2

#!/usr/bin/env python

# coding: utf-8

x = 0;y = 10

while x < 10:

print(x)

x += 1

0

1

2

3

4

5

6

7

8

9

[:-1]:遍历,去掉列表中的最后一个元素,去前面一个的元素进行操作

#!/usr/bin/env python

# coding: utf-8

url = 'lannister.poizon.com'

while url:

print(url)

url = url[:-1]

else:

print('game over')

运行:

lannister.poizon.com

lannister.poizon.co

lannister.poizon.c

lannister.poizon.

lannister.poizon

lannister.poizo

lannister.poiz

lannister.poi

lannister.po

lannister.p

lannister.

lannister

lanniste

lannist

lannis

lanni

lann

lan

la

l

game over

函数

pop函数

使用: 用于一处列表中的一个元素,默认最后一个元素,并且返回该元素值

pop(0) 删除第一个元素

#!/usr/bin/env python

# coding: utf-8

list = [1, 2, 3, 4, 5]

count = 0

while list:

print(list[0])

list.pop()

list2 = [1, 2, 3, 4, 5]

count = 0

while list2:

print(list[0])

list.pop(0)

运行:

# part 1:

1

1

1

1

1

# part 2:

1

2

3

4

5

场景练习脚本:

#!/usr/bin/env python

# coding: utf-8

import getpass

name = 'sihye'

pwd = '123456'

count = 0

while True:

if count < 3:

print('please enter your name and passwd ')

username = input('username: ')

passwd = getpass.getpass('passwd: ')

if username == name and passwd == pwd:

print('welcome come back')

break;

else:

print('wrong')

else:

print('you have already failed 3 times...logging out...')

break;

count += 1

运行:

# python user_login.py

please enter your name and passwd

username: sihye

passwd:

wrong

please enter your name and passwd

username: sihye

passwd:

wrong

please enter your name and passwd

username: sihye

passwd:

welcome come back

场景二:猜年龄游戏

#!/usr/bin/env python

# coding: utf-8

age = 8

count = 0

for i in range(20):

if count < 3:

a = int(input("age: "))

if a == age:

print('success')

break

elif a < age:

print('smaller~')

else:

print('bigger~')

else:

b = input('continue? ')

if b == 'yes':

count = 0

continue

else:

print('see u next time')

break

count += 1

运行:

# python guess_age.py

age: 1

smaller~

age: 2

smaller~

age: 1

smaller~

continue? no

see u next time

# python guess_age.py

age: 8

success

运维场景脚本

新创脚本时可自动生成python解释器

# 在用户的家目录下创建'.vimrc'文件

# root用户

# ---------

# vim ~/.vimrc

function HeaderPython()

call setline(1, "#!/usr/bin/env python")

call append(1, "#-*- coding:utf8 -*-")

normal G

normal o

normal o

endf

autocmd bufnewfile *.py call HeaderPython()

保存退出即可,之后创建.py文件就会自动生成解释器

输出某个目录下所有子目录下的文件,并输出绝对路径

方法一:用OS库

#!/usr/bin/env python

#-*- coding:utf8 -*-

import os

for root,dirs,files in os.walk('/server/scripts'):

for name in files:

print(os.path.join(root,name))

方法二:用pathlib

path.rglob()相当于 os.walk,可添加筛选条件

#!/usr/bin/env python

#-*- coding:utf8 -*-

from pathlib import Path

path = Path(r'/server')

for p in path.rglob("*.py"):

print(str(p))

pathlib库

引用:

from pathlib import Path

p = Path()

p.name 获取文件名,包含所有目录名和文件名

p.parent 获取每个文件的目录名称,一直到最后一层目录都输出,有几个文件就会输出几次

p.parents 会输出每一个子目录,返回一个iterable

场景:

#!/usr/bin/env python

#-*- coding:utf8 -*-

from pathlib import Path

path = Path(r'/server/scripts/python')

for p in path.rglob("*"):

p.parents

for i in p.parents:

print(i)

运行:

server/scripts/python

/server/scripts

/server

/

/server/scripts/python

/server/scripts

/server

/

/server/scripts/python/study_base_scripts

/server/scripts/python

/server/scripts

/server

/

场景二:

#!/usr/bin/env python

#-*- coding:utf8 -*-

from pathlib import Path

path = Path(r'/server/scripts/python')

for p in path.rglob("*"):

print(p.parent)

运行:

/server/scripts/python

/server/scripts/python

/server/scripts/python/study_base_scripts

/server/scripts/python/study_base_scripts

/server/scripts/python/study_base_scripts

场景三:判断文件是否存在

#!/usr/bin/env python

#-*- coding:utf8 -*-

from pathlib import Path

path = Path(r'/server')

path = Path(path,'scripts') # 字符串拼接,也就是后面检验的是/server/scripts是否存在

print(path.exists()) #判断文件是否存在

print(path.is_file()) #判断是否是文件

print(path.is_dir()) #判断是否是目录

运行:

# python find_file.py

True

False

True

场景四:遍历文件夹

path.iterdir(): 相当域os.listdir,

path.glob('*'), 相当于os.listdir, 可添加条件

path.rglob('*'),相当于 os.walk , 可添加筛选条件

#!/usr/bin/env python

#-*- coding:utf8 -*-

from pathlib import Path

path = Path(r'/server/scripts')

for p in path.glob("*ell"):

print(p)

print('------------------')

for n in path.iterdir():

print(n)

print('------------------')

for i in path.rglob("*.py"):

print(i)

print('------------------')

运行:

# python find_file.py

/server/scripts/shell

------------------

/server/scripts/python

/server/scripts/shell

------------------

/server/scripts/python/study_base_scripts/while_test2.py

/server/scripts/python/study_base_scripts/guess_age.py

/server/scripts/python/study_base_scripts/user_login.py

/server/scripts/python/study_base_scripts/name_test2.py

/server/scripts/python/study_base_scripts/sys_argv.py

/server/scripts/python/study_base_scripts/while_test.py

/server/scripts/python/study_base_scripts/sys_os.py

/server/scripts/python/study_base_scripts/while_test3.py

/server/scripts/python/study_base_scripts/name_test1.py

/server/scripts/python/study_base_scripts/stdout.py

/server/scripts/python/study_base_scripts/module_test1.py

/server/scripts/python/ops_base_scripts/find_file.py

/server/scripts/python/ops_base_scripts/dic_list.py

------------------

场景五:创建文件夹

#!/usr/bin/env python

#-*- coding:utf8 -*-

from pathlib import Path

# 第一种方式:前提是tmp文件夹必须存在,否则会报错。

path = Path(r'/server/tmp/python')

path.mkdir(exist_ok=True)

# 第二种方式:若是tmp文件不存在会递归创建文件夹。

path = Path(r'/server/tmp/python')

path.mkdir(exist_ok=True, parents=True)

场景五: 获取文件的详细信息

#!/usr/bin/env python

# coding:utf-8

from pathlib import Path

path = Path(r'/server/scripts/python')

print(path.stat())

print(path.stat().st_size)

print(path.stat().st_ctime)

运行:

场景六: 查看某个目录下有几个匹配类型文件

#!/usr/bin/env python

#-*- coding:utf8 -*-

from pathlib import Path

path = Path(r'/server/scripts')

for p in path.rglob('*.py'):

print(p.parent)

运行:

# python review.py | sort -rn | uniq -c

13 /server/scripts/python/study_base_scripts

4 /server/scripts/python/ops_base_scripts

方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值