久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python模塊整理(一):文件系統(tǒng)相關(guān)模塊os

 panhoy 2015-03-16
os 系統(tǒng)服務(wù)應(yīng)用程序接口(API),,系統(tǒng)管理員最應(yīng)關(guān)注的模塊之一。
一,、os模塊
(一)文件目錄,,權(quán)限相關(guān)
1、創(chuàng)建目錄
mkdir(path [, mode=0777])
os.mkdir('/tmp/os_dir',0754)
2,、刪除目錄
os.rmdir("/tmp/os_dir")
3,、列出目錄內(nèi)容
os.listdir('/root')
結(jié)果為一個(gè)列表
4、更改文件目錄
os.chdir('/tmp')
os.chroot('/tmp') #設(shè)置監(jiān)牢目錄
5,、顯示當(dāng)前目錄
os.getcwd()      
'/tmp'
6,、創(chuàng)建多層目錄 類似系統(tǒng)makedir -p
os.makedirs('test/test1/test2')
7、刪除多層目錄【每層都是空的除了要?jiǎng)h除目錄外】
os.removedirs('/tmp/test/test1/test2')
8,、創(chuàng)建一個(gè)文件
>>> f=open("/tmp/testfile", "w")
>>> f.write('test\n')
>>> f.close()
創(chuàng)建空文件呢,?
>>> f=open("/tmp/testfile", "w")
>>> f.close()
9、刪除文件
os.remove("/tmp/testfile")
10,、查看文件狀態(tài)
os.stat('/tmp/os_dir')
posix.stat_result(st_mode=16876, st_ino=17024L, st_dev=94L, st_nlink=2, st_uid=0, st_gid=0, st_size=512L, st_atime=1331646103, st_mtime=1331646103, st_ctime=1331646103)
依次是st_mode (權(quán)限模式), st_ino (inode number), st_dev (device), st_nlink (number of hard links), st_uid (所有者用戶 ID), st_gid (所有者所在組 ID ), st_size (文件大小, 字節(jié)), st_atime (最近一次訪問時(shí)間), st_mtime (最近修改時(shí)間), st_ctime (平臺相關(guān); Unix下的最近一次元數(shù)據(jù)/metadata修改時(shí)間, 或者 Windows 下的創(chuàng)建時(shí)間) - 以上項(xiàng)目也可作為屬性訪問
11,、文件改名
文件夾改名
os.rename('/tmp/os_dir','/tmp/os_rename')
文件改名
os.rename('/tmp/testfile','/tmp/TSFILE')
12、文件權(quán)限修改
chmod(path, mode)
os.chmod('/tmp/os_rename',0777)
os.chmod('/tmp/TSFILE',0666)
os.lchmod(path, mode) 修改連接文件權(quán)限
13、文件屬主修改
chown(path, uid, gid)
os.chown('/tmp/TSFILE',1003,1003)
os.chown('os_rename',0,1003)
14,、umask
os.umask(022)
15,、os.walk(topdirpath, topdown=True, onerror=None, followlinks=False)
os.walk()
函數(shù)聲明:walk(top,topdown=True,onerror=None)
1>參數(shù)top表示需要遍歷的目錄樹的路徑
2>參數(shù)topdown的默認(rèn)值是"True",表示首先返回目錄樹下的文件,然后在遍歷目錄樹的子目錄.Topdow
n的值為"False"時(shí),,則表示先遍歷目錄樹的子目錄,,返回子目錄下的文件,最后返回根目錄下的文件
3>參數(shù)onerror的默認(rèn)值是"None",表示忽略文件遍歷時(shí)產(chǎn)生的錯(cuò)誤.如果不為空,,則提供一個(gè)自定義函
數(shù)提示錯(cuò)誤信息后繼續(xù)遍歷或拋出異常中止遍歷
4>該函數(shù)返回一個(gè)元組,該元組有3個(gè)元素,,這3個(gè)元素分別表示每次遍歷的路徑名,,目錄列表和文件
列表
dirpath, dirnames, filenames
對于每個(gè)目錄樹中的目錄根在頂部(包括頂部本身,但不包括.和..),,產(chǎn)生一個(gè)3元組
組成的元組對象(dirpath,,dirnames,文件名)
第一元素就是頂層目錄,,也就是walk方法的第一個(gè)參數(shù)
第二元素是頂層目錄下子目錄的列表
第三個(gè)元素為該目錄的文件組成的列表
dirroot.next() 第一次是查找的目錄為頂層目錄
第二次迭代就是頂層目錄下其他字目錄,,然后依次就可以獲取所有目錄下面的文件
為了得到一個(gè)完整的路徑(頂部開始)到一個(gè)文件或目錄dirpath,做os.path.join(dirpath,filename),。
默認(rèn)情況下,,os.walk不遵循符號鏈接到子目錄支持它們的系統(tǒng)。為了得到這個(gè)功能,,設(shè)置可選參數(shù)'followlinks為true
將根目錄和文件名連接在一起【包括目錄和子目錄都join】
for root,dir,file in os.walk('/root'):
     [os.path.join(root,name) for name in file]
這個(gè)結(jié)果是每個(gè)文件和每個(gè)文件夾都是一個(gè)列表
...
for root,dir,file in os.walk('/root'):
    for filename in file:  
      os.path.join(root,filename)
這個(gè)結(jié)果顯示每一個(gè)文件的路徑(包括隱藏文件)
....
>>> path_collection=[]                                     
>>> for root,dir,file in os.walk('/root'):                 
...     for filename in file:                              
...             fullpath=os.path.join(root,filename)                
...             path_collection.append(fullpath)
將目錄全部文件的路徑,,保存到一個(gè)列表對象
     
..........   
將根目錄和子目錄連接在一起
for root, dirs, files in os.walk('/root'):
    [os.path.join(root,dirname) for dirname in dirs]
>>> for root, dirs, files in os.walk('/root'):                       
...     print root, "consumes",                                 
...     print sum([getsize(join(root, name)) for name in files]),
...     print "bytes in", len(files), "non-directory files"
每一個(gè)目錄都是root
(二)用戶相關(guān)
os.getuid()
os.getgid()
os.getgroups()
os.getlogin() 登陸用戶
(二)進(jìn)程相關(guān)
1、獲取當(dāng)前進(jìn)程
os.getpid
2,、執(zhí)行操作系統(tǒng)命名
1)os.system(command)
這個(gè)方法直接返回命令的結(jié)果
command = "ls -l"
os.system(command)
os.system('ps -aux|grep python')
2)os.popen(command)
這個(gè)方法將命令返回值得保存到一個(gè)文件對象里,,這個(gè)對象需要通過read()等方法讀取內(nèi)容。
Open a pipe to/from a command returning a file object. 這個(gè)文件對象保留在內(nèi)存中,。
p=os.popen('ssh 10.3.16.121 ps aux | grep mysql')
x=p.read()
print x
p.close()
print os.popen('ps aux | grep python').read()
如果不確定參數(shù)的安全性, 那么最好使用 exec 或 spawn
3,、啟動(dòng)新的進(jìn)程
>>> import os
>>> program = "python"
>>> arguments = ["hello.py"]
>>> os.execvp(program, (program,) +  tuple(arguments))
hello again, and welcome to the show
使用的是execvp函數(shù),它會從【標(biāo)準(zhǔn)路徑搜索執(zhí)行程序】,把第二個(gè)參數(shù)(元組)作為單獨(dú)的參數(shù)傳遞給程
序,并使用當(dāng)前的環(huán)境變量來運(yùn)行程序. 其他七個(gè)同類型函數(shù)。
在 Unix 環(huán)境下, 你可以通過組合使用 exec , fork 以及 wait 函數(shù)來從當(dāng)前程序調(diào)用另一個(gè)程序,
fork 函數(shù)復(fù)制當(dāng)前進(jìn)程, wait  函數(shù)會等待一個(gè)子進(jìn)程執(zhí)行結(jié)束.
3,、os 模塊調(diào)用其他程序 (Unix)
>>> def run(program, *args):
...     pid = os.fork()
...     if not pid:
...             os.execvp(program, (program,) +  args)
...     return os.wait()[0]
>>> run("python", "hello.py")
hello again, and welcome to the show
1701
fork函數(shù)在子進(jìn)程中返回0(這個(gè)進(jìn)程首先從fork返回值),在父進(jìn)程中返回一個(gè)非0的進(jìn)程標(biāo)識符(子進(jìn)程的PID). 也就是說,
只有當(dāng)我們處于父進(jìn)程的時(shí)候 "not pid" 才為真.(即在子進(jìn)程中pid為0,,pid==0為真,在父進(jìn)程中not pid(not 0),pid>0為真)
通過os模塊中的fork方法,,一個(gè)進(jìn)程(Process)可以生成一個(gè)獨(dú)立子進(jìn)程,。fork是一個(gè)程序拷貝(copyi
ng-program)的過程:當(dāng)程序調(diào)用fork方法,操作系統(tǒng)生成一份該程序及其在內(nèi)存中的進(jìn)程的新的拷貝
,,并以與原始程序并行的方式開始執(zhí)行這份拷貝,。原始程序稱為父進(jìn)程,新生成的拷貝叫做子進(jìn)程。父
進(jìn)程可以生成任意數(shù)目的子進(jìn)程,,子進(jìn)程還可以生成它的子進(jìn)程,。這些子進(jìn)程在操作系統(tǒng)的控制下相互獨(dú)立的并行運(yùn)行。子進(jìn)程可以繼續(xù)運(yùn)行即便父進(jìn)程已退出,。
>>> def run(program, *args):
...     pid = os.fork()
...     if not pid:
...             os.execvp(program, (program,) +  args)
...     return os.wait()  
...
>>> run("python", "hello.py")            
hello again, and welcome to the show
(1546, 0)
os.wait() 返回一個(gè)元組,,這個(gè)兩個(gè)數(shù)據(jù)代表什么? 第一元組已完成的子進(jìn)程號pid,,第二個(gè)元素為0表示子進(jìn)程的退出狀態(tài)
os.wait函數(shù)用于等待子進(jìn)程結(jié)束(只適用于UNIX兼容系統(tǒng)),。該函數(shù)返回包含兩個(gè)元素的元組,包括已完成的子進(jìn)程號pid,。以及子進(jìn)程的退出狀態(tài),,返回狀態(tài)為0,表明子進(jìn)程成功完成,。返回狀態(tài)為正整數(shù)表明子進(jìn)程終止時(shí)出錯(cuò).
如沒有子進(jìn)程,,會引發(fā)OSError錯(cuò)誤。os.wait
要求父進(jìn)程等待它的任何一個(gè)子進(jìn)程結(jié)束執(zhí)行,,然后喚醒父進(jìn)程,。要指示父進(jìn)程等候一個(gè)指定的子進(jìn)程終止,可在父進(jìn)程中使用os.waitpid
函數(shù)(只適用于unix兼容系統(tǒng)).
它可等候一個(gè)指定進(jìn)程結(jié)束,,然后返回一個(gè)雙元素元組,,其中包括子進(jìn)程的pid和子進(jìn)程的退出狀態(tài)。函數(shù)調(diào)用將pid
作為第一個(gè)參數(shù)傳遞,。并將一個(gè)選項(xiàng)作為第二個(gè)選項(xiàng),,如果第一個(gè)參數(shù)大于0,則waitpid會等待該pid結(jié)束,,如果第一個(gè)參數(shù)是-1
,,則會等候所有子進(jìn)程,也就和os.wait一樣
參考http://developer.51cto.com/art/201003/185584.htm
fork和wait 函數(shù)在 Windows 上是不可用的, 但是你可以使用 spawn 函數(shù), 不過, spawn
不會沿著路徑搜索可執(zhí)行文件, 你必須自己處理好這些
4,、使用 os 模塊調(diào)用其他程序 (Windows)
os.spawnv(os.P_WAIT, file, (file,) + args)
5,、使用 spawn 或 fork/exec 調(diào)用其他程序
6、處理守護(hù)進(jìn)程(Daemon Processes)
Unix系統(tǒng)中,你可以使用fork函數(shù)把當(dāng)前進(jìn)程轉(zhuǎn)入后臺(一個(gè)"守護(hù)者/daemon").一般來說,需要派生(fo
rk off)一個(gè)當(dāng)前進(jìn)程的副本, 然后終止原進(jìn)程
import os
import time

pid = os.fork()
if pid:
    os._exit(0) # kill original
print "daemon started"
time.sleep(10)
print "daemon terminated"
7,、使用os模塊終止當(dāng)前進(jìn)程
os._exit(0)
(三)執(zhí)行操作系統(tǒng)命名
command = "ls -l"
os.system(command)
os.system('ps -aux|grep python')
(四)其他
1,、獲取環(huán)境變量
os.getenv('USER',default=None)
os.getenv('HOSTTYPE',default=None)
2、修改環(huán)境
putenv(key, value)
3,、判斷操作系統(tǒng)
os.name
if os.name in ("nt", "dos"):
    exefile = ".exe"
else:
    exefile = "
(五)os.path模塊
os.path模塊包含了各種處理長文件名(路徑名)的函數(shù).先導(dǎo)入os模塊,然后就可以以os.path訪問該模

1)簡單的方法
拆分,,目錄名,文件名,,連接
import os
filename = "my/little/pony"
print "using", os.name, "..."
print "split", "=>", os.path.split(filename)
print "splitext", "=>", os.path.splitext(filename)
print "dirname", "=>", os.path.dirname(filename)
print "basename", "=>", os.path.basename(filename)
print "join", "=>", os.path.join(os.path.dirname(filename),os.path.basename(filename))
結(jié)果
using posix ...
split => ('my/little', 'pony')
splitext => ('my/little/pony', '')
dirname => my/little
basename => pony
join => my/little/pony
注意這里的 split 只分割出最后一項(xiàng)(不帶斜杠).
2,、判斷文件或文件夾是否存在
>>> os.path.exists(filename)
False
>>> os.path.exists('/root')
True
>>> os.path.exists('/root/wc.py')   
True
3,、判斷是否是目錄
>>> os.path.isdir('/root/wc.py')     
False
>>> os.path.isdir('/root')     
True
4、判斷是否是文件
>>> os.path.isfile('/root')  
False
>>> os.path.isfile('/root/wc.py') 
True
5,、判斷是否是連接文件,,是否是掛載文件
>>> os.path.islink('/root/wc.py')
>>> os.path.ismount('/root/wc.py')
6、判斷兩個(gè)目錄是否有相同的文件
>>> os.path.samefile('/root/pathdir1','/root/pathdir2')
True
做了鏈接,,判斷就為真,。
7、獲取文件(文件夾)大小
>>> os.path.getsize('/root/pathdir1')
512L
8,、獲取文件時(shí)間戳
創(chuàng)建時(shí)間
>>> os.path.getctime('/root/pathdir1/person.py')
修改時(shí)間
>>> os.path.getmtime('/root/pathdir1/person.py')   
訪問時(shí)間
>>> os.path.getatime('/root/pathdir1/person.py')
9,、walk(top, func, arg)
Directory tree walk with callback function.
os.path.walk()
函數(shù)聲明:walk(top,func,arg)
1>參數(shù)top表示需要遍歷的目錄樹的路徑
2>參數(shù)func表示回調(diào)函數(shù),對遍歷路徑進(jìn)行處理.所謂回調(diào)函數(shù),,是作為某個(gè)函數(shù)的參數(shù)使用,,當(dāng)某個(gè)
時(shí)間觸發(fā)時(shí),程序?qū)⒄{(diào)用定義好的回調(diào)函數(shù)處理某個(gè)任務(wù).回調(diào)函數(shù)必須提供3個(gè)參數(shù):第1個(gè)參數(shù)為wa
lk()的參數(shù)arg,,第2個(gè)參數(shù)表示目錄列表,第3個(gè)參數(shù)表示文件列表
3>參數(shù)arg是傳遞給回調(diào)參數(shù)func的元組.回調(diào)函數(shù)的一個(gè)參數(shù)必須是arg,,為回調(diào)函數(shù)提供處理參數(shù).
參數(shù)arg可以為空
import os
def callback(arg, directory, files):
    for file in files:
        print os.path.join(directory, file), repr(arg)

os.path.walk("/root", callback, "secret message"
os.path.walk的第三個(gè)參數(shù)傳給回調(diào)函數(shù)做第一參數(shù),,os.path.walk的第一個(gè)參數(shù)(目錄)傳遞給回
調(diào)函數(shù)做第二個(gè)函數(shù),回調(diào)函數(shù)的第三個(gè)函數(shù)就是目錄下的file.
os.path.walk()與os.walk()產(chǎn)生的文件名列表并不相同.os.path.walk()產(chǎn)生目錄樹下的目錄路徑和\
文件路徑,,而os.walk()只產(chǎn)生文件路徑.
# -*- coding: utf-8 -*-
import os
for root, dirs, files in os.walk('/root'):
        open('/tmp/rootdir', 'a').write("%s %s %s" % (root,dirs,files))

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多