shutil模块
复制和移动
-
shutil.copyfileobj(fsrc, fdst[, length])
将类似文件的对象fsrc的内容复制到类似文件的对象fdst。 -
shutil.copyfile(src, dst, *, follow_symlinks=True)
将名为src的文件的内容(无元数据)复制到名为dst的文件,然后返回dst。 -
shutil.copy(src, dst, *, follow_symlinks=True)
将文件src复制到文件或目录dst。src和dst应为字符串。如果dst指定目录,则文件将使用src的基本文件名复制到dst中。返回新创建的文件的路径。 -
shutil.copy2(src, dst, *, follow_symlinks=True)
与copy()相同,但copy2()也尝试保留所有文件元数据。 -
shutil.move(src, dst, copy_function=copy2)
递归地将文件或目录(src)移动到另一个位置(dst),并返回目标
目录操作
- shutil.copytree(src, dst, symlinks=False, ignore=None,copy_function=copy2, ignore_danglin g_symlinks=False)
递归地复制以src为根的整个目录树,返回目标目录。由dst命名的目标目录不能已经存在。 - shutil.rmtree (path, ignore_errors=False, οnerrοr=None)
删除整个目录树; 路径必须指向目录(而不是指向目录的符号链接)
权限管理
- shutil.copymode(src, dst, *, follow_symlinks=True)
将权限位从src复制到dst。文件内容,所有者和组不受影响。src和dst是以字符串形式给出的路径名称。 - shutil.copystat(src, dst, *, follow_symlinks=True)
将权限位,最后访问时间,上次修改时间和标志从src复制到dst。 - shutil.chown(path, user=None, group=None)
更改给定路径的所有者用户和/或组
>>> import shutil
# copyfileobj只是了解底层原理,实际代码不需要使用
>>> f1 = open('/bin/ls', 'rb')
>>> f2 = open('/tmp/list4', 'wb')
>>> shutil.copyfileobj(f1, f2)
>>> f1.close()
>>> f2.close()
# shutil.copyfile只拷贝内容
>>> shutil.copyfile('/bin/ls', '/tmp/list5')
# shutil.copy既拷贝内容,又拷贝权限
>>> shutil.copy('/bin/ls', '/tmp/list6')
# shutil.copy2相当于系统命令cp -p
>>> shutil.copy2('/bin/ls', '/tmp/list7')
# shutil.move => 相当于系统命令mv
>>> shutil.move('/tmp/list7', '/var/tmp/list')
# copytree相当于cp -r
>>> shutil.copytree('/etc/security', '/tmp/security')
>>> shutil.move('/tmp/security', '/var/tmp/auquan')
# rmtree 相当于rm -rf
>>> shutil.rmtree('/var/tmp/auquan')
# 删除单个文件的函数在os模块
>>> import os
>>> os.remove('/tmp/list5')
# 改变属主属组
>>> shutil.chown('/tmp/list', user='bob', group='bob')
subprocess模块
概述
- subprocess模块主要用于执行系统命令
- subprocess模块允许你产生新的进程,连接到它们的输入/输出/错误管道,并获得它们的返回代码
- 本模块旨在替换几个较早的模块和功能,如
os.system、os.spawn*
run方法
- subprocess.run方法在python3.5引入。早期版本可以使用subprocess.call方法
直接执行命令
>>> subprocess.run('ls')
>>> subprocess.run(['ls','/home'])
>>> subprocess.run('ls /home')
... ...
FileNotFoundError: [Errno 2] No such file or directory: 'ls /home': 'ls /home'
>>> subprocess.run(['ls', '~'])
ls: cannot access ~: No such file or directory
通过shell执行命令
>>> subprocess.run(['ls', '~'], shell=True)
>>> subprocess.run('ls /home', shell=True)
run方法返回值
>>> result = subprocess.run(['ls', '/home'])
>>> result.args
['ls', '/home']
>>>
输出和错误
- run方法执行的结果默认打印在屏幕上,也可以通过管道将其存储在标准输出和标准错误中
>>> result = subprocess.run(['ls', '/home'], stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
>>> result.stdout
b'alice\nbob\njerry\nlisi\nStudent\ntom\nwangwu\n'
>>> print(result.stdout.decode())
alice
bob
jerry