顯示具有 os 標籤的文章。 顯示所有文章
顯示具有 os 標籤的文章。 顯示所有文章

2011年3月30日

os.walk

要處理目錄結構用的
import os

for rootpath, dirlist, filelist in os.walk("./"):
print rootpath, dirlist, filelist

就可以看出效果,以這樣的目錄結構:
.
|-- 2
| |-- 3
| | |-- 4a
| | `-- 4b
| `-- 3a
|-- 2a
`-- 2b
`-- X


剛剛的code會print:
./ ['2b', '2'] ['2a']
./2b [] ['X']
./2 ['3'] ['3a']
./2/3 [] ['4b', '4a']

印出 4 行,也就是說,上面的 code, ,loop 4 次。


walk 的方式分為 TopDown 和 ButtomUp (TopDown=False).

TopDown 的時候,可以刪掉 dirlist 的內容,這樣接下來的 walk 就不會進去..
import os

for rootdir,dirlist,filelist in os.walk('./'):
print rootdir, dirlist, filelist
if '2b' in dirlist:
dirlist.remove('2b')

結果,2b 的內容就不會出現:
./ ['2b', '2'] ['2a']./2b [] ['X']
./2/3 [] ['4b', '4a']
./2 ['3'] ['3a']
./ ['2b', '2'] ['2a']

只有出現 3 次




ButtomUp 用在要刪除目錄的時候,因為目錄是空的就不能刪除,
所以要 ButtomUp..

上面的目錄結構用 os.walk('.',topdown=False) 結果是
./2b [] ['X']
./2/3 [] ['4b', '4a']
./2 ['3'] ['3a']
./ ['2b', '2'] ['2a']

2009年5月13日

pipe

也跟 unix 的 pipe 一樣,下面是配合 fork 作例子:

import os, sys

r, w = os.pipe()

pid = os.fork()

if pid:
os.close(w)
r = os.fdopen(r)
txt = r.read()
os.waitpid(pid,0)

else:
os.close(r)
w = os.fdopen(w,'w')
w.write('hello from server')
w.close()
print 'child exit'
sys.exit(0)
print 'all over'

fork

跟unix fork 一樣耶

import sys, os
import time

pid = os.fork()
if pid > 0:
# child
print "child PID %d" % pid
for i in range(10):
time.sleep(1)
print "-"
sys.exit(0)
print "parent PID %d" % pid
for j in range(10):
time.sleep(1)
print '+'