通过输入重定向获取文件
脚本 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.pngimage.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)
未完,待续...
网友评论