1.shutil模塊
(1) 復(fù)制和移動(dòng)
- shutil.copyfilebj(fsrc, fdst[, length])
- 將類似文件的對(duì)象fsrc的內(nèi)容復(fù)制到類似文件的對(duì)象fdst
- shutil.copyfile(src, dst, *, follow_symlinks=True)
- 將名為src的文件的內(nèi)容(無元數(shù)據(jù))復(fù)制到名為dst的文件萄喳,然后返回dst
- shutil.copy(src, dst, *, follow_symlinks=True)
- 將文件src復(fù)制到文件或目錄dst柔滔,src和dst應(yīng)為字符串漾月,如果dst指定目錄。則文件將使用src的基本文件名復(fù)制到dst中,返回新創(chuàng)建的文件的路徑列荔。
- shutil.copy2(src, dst, *, follow_symlinks=True)
- 與copy()相同,但copy2()也嘗試保留所有文件元數(shù)據(jù),等同"cp -p"
- shutil.move(src, dst, copy_function=copy2)
- 遞歸地將文件或目錄(src)移動(dòng)到另一個(gè)位置(dst)瘾蛋,并返回目標(biāo)
(2) 目錄操作
- shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)
- 遞歸地復(fù)制以src為根的整個(gè)目錄樹俐镐,返回目標(biāo)目錄矫限。由dst命名的目標(biāo)目錄不能已經(jīng)存在
- shutil.rmtree(path, ignore_errors=False, onerror=None)
- 刪除整個(gè)目錄樹; 路徑必須指向目錄(而不是指向目錄的符號(hào)鏈接)
(3) 權(quán)限管理
- shutil.copymode(src, dst, *, follow_symlinks=True)
- 將權(quán)限位從src復(fù)制到dst。文件內(nèi)容佩抹、所有者和組不受影響叼风。src和dst是以字符串形式給出的路徑和名稱。
- shutil.copystat(src, dst, *, follow_symlinks=True)
- 將權(quán)限位棍苹、最后訪問時(shí)間无宿、上次修改時(shí)間和標(biāo)志從src復(fù)制到dst
- shutil.chown(path, user=None, group=None)
(4) 案例
import shutil
import os # 刪除單個(gè)文件需要導(dǎo)入 os 模塊
def cpfobj(src, dst):
# copyfile值了解底層原理,實(shí)際代碼不需要使用
f1 = open(src, 'rb')
f2 = open(dst, 'wb')
shutil.copyfileobj(f1, f2)
f1.close()
f2.close()
def cpf(src, dst):
# 只拷貝內(nèi)容
shutil.copyfile(src, dst)
def cp(src, dst):
# 既拷貝內(nèi)容枢里,又拷貝權(quán)限
shutil.copy(src, dst)
def cp2(src, dst):
# 相當(dāng)于cp -p
shutil.copy2(src, dst)
def mv(src, dst):
# 相當(dāng)于mv
shutil.move(src, dst)
def cptr(src, dst):
# 需要將目標(biāo)名也寫出來
shutil.copytree(src, dst)
def rmtr(path):
# 相當(dāng)于rm -rf孽鸡,但只能刪除目錄
shutil.rmtree(path)
def rm(path):
# 刪除單個(gè)文件
os.remove(path)
if __name__ == '__main__':
cpfobj('/bin/ls', '/tmp/list5')
cpf('/bin/ls', '/tmp/list6')
cp('/bin/ls', '/tmp/list7')
cp2('/bin/ls', '/tmp/list8')
mv('/tmp/list8', '/tmp/list')
cptr('/etc/security', '/tmp/security')
mv('/tmp/security', '/var/tmp/auquan')
rmtr('/var/tmp/auquan')
rm('/tmp/list5')
(6) python官方手冊
https://docs.python.org
2.subprocess模塊
(1) 概述
- subprocess模塊主要用于調(diào)用和執(zhí)行系統(tǒng)命令
- subprocess模塊允許你產(chǎn)生新的進(jìn)程,連接到它們的輸入/輸出/錯(cuò)誤管道栏豺,并獲得它們的返回代碼
- 本模塊旨在替換幾個(gè)較早的模塊和功能彬碱,如os.system、os.spawn*
import subprocess
import sys
def subr(com, args):
for i in args:
print('\033[031;1m%s %s\033[0m' % (com, i))
subprocess.run(com+' '+i, shell=True)
if __name__ == '__main__':
print(sys.argv)
com = sys.argv[1]
for i in range(2):
sys.argv.remove(sys.argv[0])
args = sys.argv
# print(args)
subr(com, args)
# subprocess.run的返回值(returncode)為系統(tǒng)的$?
# 捕獲輸出
import subprocess
rc = subprocess.run('id root; id john', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(rc.returncode)
print(rc.stdout.decode(), end='')
print(rc.stderr.decode(), end='')