Python pathlib subprocess fstrin

2019-05-29  本文已影响0人  zestloveheart

介绍

记录一下几个工具的使用方法

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
  % 百分数格式

shutil

感觉可以由pathlib和subprocess替代,所以暂时不总结了。

上一篇 下一篇

猜你喜欢

热点阅读