TP 7 : dibbler.py
dibbler.py
— 1 KB
Contenu du fichier
#!/usr/bin/python
import os, sys, select, time, random
root = 'dibbler.dir'
tmpfile = 'dibbler.tmp'
count = 100
dirfudge = 0.2
delay = 1
timeout = 10
if not os.path.isdir(root):
os.mkdir(root)
if os.listdir(root):
print "Warning : %s not empty"%repr(root)
class client:
def handle_read(self):
pass
def log(msg):
print >>sys.stderr, msg
def check_clients(deadline):
while time.time() < deadline:
rfds, wfds, efds = select.select(clients, [], [], max(deadline-time.time(),0))
for client in rfds:
client.handle_read()
def make_directory():
rootdir = random.choice(dirs)
dirname = "%f"%random.random()
dirpath = os.path.join(rootdir, dirname)
try:
log("Creating directory : %s"%repr(dirpath))
os.mkdir(dirpath)
dirs.append(dirpath)
except:
print "Could not make "+repr(dirname)
def make_pebble(i):
rootdir = random.choice(dirs)
filename = str(i)
filepath = os.path.join(rootdir, filename)
value = "%03d"%random.randint(0,999)
log("Creating file : %s (data : %s)"%(repr(filepath), value))
f = open(tmpfile,"w")
f.write(value)
f.close()
pebbles[i]=value
os.rename(tmpfile, filepath)
i = 1
pebbles = {}
dirs = [root]
clients = []
next = time.time()
while i<count:
check_clients(next)
if random.random()<dirfudge:
make_directory()
else:
make_pebble(i)
i += 1
next += delay
next += timeout
log("Waiting %d second(s) before exitting..."%timeout)
check_clients(next)