1 from twisted.internet import process, protocol, defer
2 from twisted.python import failure
3
6
9 self.deferred=deferred
10 self.count=count
11 self.stdout=''
12 self.stderr=''
13
15 self.stdout=self.stdout+data
16
18 self.stderr=self.stderr+data
19
21 if self.stderr:
22 self.deferred.errback(failure.Failure(
23 PwgenException(reason, self.stderr)))
24 elif self.stdout:
25 lines=[x for x in self.stdout.split('\n') if x]
26 if len(lines)!=self.count:
27 self.deferred.errback(failure.Failure(
28 PwgenException(reason, 'Wrong number of lines received.')))
29 self.deferred.callback(lines)
30 else:
31 self.deferred.errback(failure.Failure(PwgenException(reason, '')))
32
34 assert n>0
35 d=defer.Deferred()
36 proto=ReadPassword(d, n)
37 process.Process(reactor, 'pwgen', ('pwgen', '-cn1', '-N', '%d'%n), {}, None, proto)
38 return d
39
40 if __name__=='__main__':
41 from twisted.internet import reactor
42 import sys
44 for p in passwords:
45 sys.stdout.write('%s\n' % p)
46 return passwords
47
49 fail.trap(PwgenException)
50 sys.stderr.write('pwgen: %s\n' % fail.getErrorMessage())
51
52
53
54 l=[]
55 for i in range(5):
56 d=generate(reactor, 5)
57 d.addCallbacks(say, err)
58 l.append(d)
59
60 dl=defer.DeferredList(l)
61 dl.addBoth(lambda dummy: reactor.stop())
62 reactor.run()
63