Python pathlib subprocess fstrin
2019-05-29 本文已影响0人
zestloveheart
介绍
记录一下几个工具的使用方法
- pathlib
- subprocess
- fstring
- shutil
pathlib
pathlib替代了os.path,好用。
引包:from pathlib import Path
代码 | 功能 |
---|---|
创建 | |
p = Path() | 当前路径 |
p = Path("G:\temp") | 括号内路径 |
属性 | |
p.name/stem/suffix | name = stem + suffix |
p.parent | 父目录 |
p.parents | 父目录的迭代器 |
p.parts | 分割路径 |
方法 | |
p.exists() | 判断文件是否存在 |
p.is_file() / is_dir() | 判断是否是文件/目录 |
p.glob('*') / rglob('*') | 遍历文件夹的第一层/所有层,*是通配符匹配 |
p.resolve() | resolve() = parent + name |
详细信息 | |
p.stat() | 文件信息 |
p.stat().st_size | 文件大小 |
p.stat().st_ctime/st_mtime | 创建/修改时间 |
目录 | |
p.mkdir(exist_ok=True,parents=True) | 递归创建文件夹 |
p.rmdir() | 移除空目录 |
修改 | |
p.with_name(name) | 修改最后一级路径名 |
p.with_suffix(suffix) | 修改后缀名 |
subprocess
替代了os.system和os.spawn*,可以启动一个子进程,运行linux命令。
# 引包
import subprocess as sbp
# 在python3中只需要一个方法
sbp.run()
# 函数原型
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)
# example
sbp.run(['ls','-l','/'])
sbp.run(['mkdir','-p','/home/test'])
# 如果要用通配符*,则需要调整参数,把shell=True,并把命令合成一个字符串
sbp.run([f'mv Y*l {output_dir}'],shell=True)
该函数会返回一个subprocess.CompletedProcess类的实例
该类相当于一个执行结果,包含已结束进程的状态信息
该类有以下属性
args:用于加载该进程的参数,列表 or 字符串
returncode:子进程的退出状态码。0:成功运行;负数N:该子进程被信号N终止
stdout:
子进程的输出。通常是字节序列;
if run()指定universal_newlines=True,则该值是字符串;
if run()指定stderr=subprocess.STDOUT,则stdout和stderr将会被整合到这里,且stderr将会为None
stderr:从子进程捕获的异常。取值与stdout类似。if stderr没有被捕获的话,它的值就为None
check_returncode():if returncode是一个非0值,则该方法会抛出一个CalledProcessError异常。
# subprocess实现sudo 自动输入密码
import subprocess
mypass = '123'
echo = subprocess.Popen(['echo',mypass],
stdout=subprocess.PIPE,
)
sudo = subprocess.Popen(['sudo','-S','iptables','-L'],
stdin=echo.stdout,
stdout=subprocess.PIPE,
)
end_of_pipe = sudo.stdout
print ("Password ok \n Iptables Chains %s" % end_of_pipe.read())
例如Python里面执行sudo apt-get install vim (Linux里面要输入密码)
linux中应该echo '123' | sudo -S iptables -L
python直接 subprocess.popen("echo '123' | sudo -S iptables -L",shell=True)
f-string
格式化字符串常量,比较新的特性,python3.6出现,好用。
f_string = f'{变量、表达式、函数}{content:format}'
在format中可以调整格式
对齐:<左 ^中 >右
正数符号:“+”加号 “-”无号 “ ”空格
加井号:'#'
是否补零,宽度,小数位:0width.precision
类型描述符
s 字符串
c unicode编码
b o d x 二 八 十 十六 进制
e E 科学计数法
f 浮点数
g G通用格式,小数用f,大数用e
% 百分数格式
- 参考
https://blog.csdn.net/sunxb10/article/details/81036693
https://docs.python.org/3/library/string.html#format-string-syntax
shutil
感觉可以由pathlib和subprocess替代,所以暂时不总结了。