python3 运维开发动态语言Ruby Python

Python3 提升你脚本的逼格系列(一)

2018-11-26  本文已影响106人  运维开发_西瓜甜

通过输入重定向获取文件

脚本 filein.py 的内容如下:

#!/usr/bin/env python3

import fileinput

with fileinput.input() as f:
    tpl = "文件名: {} 行号: {}\n 行内容: {}"
    for line in f:
        print(tpl.format(f.filename(),
                         f.lineno(),
                         line), end='')

使用这个脚本

chmod +x filein.py
./filein.py  top.txt

终止脚本并给出错误信息

raise SystemExit('It failed!')

执行脚本

[root@sharkyun ~]# python3 error.py
It failed!
[root@sharkyun ~]# echo $?
1

脚本中输入的密码时隐藏

import getpass
user = getpass.getuser()
passwd = getpass.getpass()
print(user, passwd)
image.png

注意 getpass.getuser() 不会提示你输入用户名,而是获取到当运行脚本环境下的系统登录用户

假如你希望显示,并且使用输入的用户名请用 input() 替代

user = input('Enter your username: ')

获取终端的大小

有时候你需要获取运行脚本的大小,以便可以很正确的格式化输出

image.png
image.png

执行系统的命令并返回字符串结果

import subprocess
cmd = "top -b -n 1 -o %MEM"
cmd_ret = subprocess.getoutput(cmd)

lines = cmd_ret.split('\n')
dt = lines[0].split()[2]

print('获取时间:', dt)
for i in lines[7:]:
    pid, *_, cpu, mem, _, _ = i.split()
    print(pid, cpu, mem)

复制或者移动文件和目录

shutil 模块有很多便捷的函数可以复制文件和目录。使用起来也非常简单,比如:

import shutil

# 一般拷贝
shutil.copy(src, dst)

# 拷贝文件时候,连同文件的权限也拷贝,相当于 `shell` 中的 `cp -p src dst`
shutil.copy2(src, dst)

# 递归拷贝,相当于 `shell` 中的 `cp -R src dst`
shutil.copytree(src, dst)

# 移动文件
shutil.move(src, dst)

shutil.copytree() 假如被拷贝的对象中出现了符合链接文件,默认会拷贝这个符号链接指向的实际文件,假如只想拷贝符号链接本身,可以传递关键字参数,如下:

shutil.copytree(src, dst, symlinks=True)

shutil.copytree() 在进行递归拷贝时,还可以指的忽略哪些文件或目录

shutil.copytree(src, dst, ignore=shutil.ignore_patterns('*.', '*.pyc'))

当执行 shutil.copytree() 的时候,有可能会遇到错误异常的出现,比如一个无效的符合链接,一个无权访问的文件等。

避免无效的符合链接,只需要这样做

shutil.copytree(src, dst, ignore_dangling_symlinks=True)

其他的可以用捕获异常来处理

try:
    shutil.copytree(src, dst)
except shutil.Error as e:
    for src, dst, msg in e.args[0]:
        print(dst, src, msg)

也可以递归的删除

 shutil.rmtree(dst_dir)

未完,待续...

上一篇 下一篇

猜你喜欢

热点阅读