Mercurial > hg > config
comparison python/multiproc.py @ 610:5ce25399da67
STUB: python/multiproc.py
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Sun, 02 Feb 2014 12:40:07 -0800 |
parents | 3ea759399b8f |
children | 8e23bbc9c197 |
comparison
equal
deleted
inserted
replaced
609:3ea759399b8f | 610:5ce25399da67 |
---|---|
15 | 15 |
16 class Process(subprocess.Popen): | 16 class Process(subprocess.Popen): |
17 """why would you name a subprocess object Popen?""" | 17 """why would you name a subprocess object Popen?""" |
18 | 18 |
19 # http://docs.python.org/2/library/subprocess.html#popen-constructor | 19 # http://docs.python.org/2/library/subprocess.html#popen-constructor |
20 defaults = {'buffsize': 1, # line buffered | 20 defaults = {'bufsize': 1, # line buffered |
21 } | 21 } |
22 | 22 |
23 def __init__(self, command, **kwargs): | 23 def __init__(self, command, **kwargs): |
24 | 24 |
25 # setup arguments | 25 # setup arguments |
33 _kwargs['shell'] = isinstance(command, string) | 33 _kwargs['shell'] = isinstance(command, string) |
34 | 34 |
35 # output buffer | 35 # output buffer |
36 self.output_buffer = tempfile.SpooledTemporaryFile() | 36 self.output_buffer = tempfile.SpooledTemporaryFile() |
37 self.location = 0 | 37 self.location = 0 |
38 self.output = [] | 38 self.output = '' |
39 _kwargs['stdout'] = self.output_buffer | 39 _kwargs['stdout'] = self.output_buffer |
40 | 40 |
41 # launch subprocess | 41 # launch subprocess |
42 self.start = time.time() | 42 self.start = time.time() |
43 subprocess.Popen.__init__(self, command, **_kwargs) | 43 subprocess.Popen.__init__(self, command, **_kwargs) |
55 if run_time > maxtime: | 55 if run_time > maxtime: |
56 # TODO: read from output | 56 # TODO: read from output |
57 return process.kill() | 57 return process.kill() |
58 | 58 |
59 # read from output buffer | 59 # read from output buffer |
60 self.output_buffer.seek(self.location) | 60 read = self.read() |
61 read = self.output_buffer.read() | |
62 self.location += len(read) | |
63 | 61 |
64 # naptime | 62 # naptime |
65 if sleep: | 63 if sleep: |
66 time.sleep(sleep) | 64 time.sleep(sleep) |
67 | 65 |
68 # reset tempfile | 66 # reset tempfile |
69 output.seek(0) | 67 output.seek(0) |
70 | 68 |
71 return self.returncode # set by ``.poll()`` | 69 return self.returncode # set by ``.poll()`` |
70 | |
71 def read(self): | |
72 """read from the output buffer""" | |
73 self.output_buffer.seek(self.location) | |
74 read = self.output_buffer.read() | |
75 self.output += read | |
76 self.location += len(read) | |
77 return read | |
72 | 78 |
73 def commandline(self): | 79 def commandline(self): |
74 """returns string of command line""" | 80 """returns string of command line""" |
75 | 81 |
76 if isinstance(self.command, string): | 82 if isinstance(self.command, string): |
107 | 113 |
108 # list programs | 114 # list programs |
109 if options.list_programs: | 115 if options.list_programs: |
110 for key in sorted(progs.keys()): | 116 for key in sorted(progs.keys()): |
111 print ('{}: {}'.format(key, subprocess.list2cmdline(progs[key]))) | 117 print ('{}: {}'.format(key, subprocess.list2cmdline(progs[key]))) |
118 sys.exit(0) | |
112 | 119 |
113 # select program | 120 # select program |
114 prog = progs[options.program] | 121 prog = progs[options.program] |
115 | 122 |
116 proc = Process(prog) | 123 proc = Process(prog) |