"""
import logging
+import os
from subprocess import PIPE
import subprocess
import select
finish.
"""
- def __init__(self, cmd_list, N=0, cwd=None):
+ def __init__(self, cmd_list, N=0, cwd=None, env=None):
"""
cmd_list is a list of elements suitable for subprocess
N is the number of simultanious processes to run.
self.running = {}
self.N = N
self.cwd = cwd
+ self.env = env
def under_process_limit(self):
"""
while (len(self.to_run) > 0) and self.under_process_limit():
queue_log.info('%d left to run', len(self.to_run))
cmd = self.to_run.pop(0)
- p = subprocess.Popen(cmd, stdout=PIPE, cwd=self.cwd, shell=True)
+ p = subprocess.Popen(cmd,
+ stdout=PIPE,
+ shell=True,
+ cwd=self.cwd,
+ env=self.env)
self.running[p.stdout] = p
queue_log.info("Created process %d from %s" % (p.pid, str(cmd)))
# wait for something to finish
# wl= write list, xl=exception list (not used so get bad names)
- read_list, wl, xl = select.select(fds, [], fds)
-
+ read_list, wl, xl = select.select(fds, [], fds, 1 )
+
# for everything that might have finished...
for pending_fd in read_list:
pending = self.running[pending_fd]
queue_log.info("Process %d finished [%d]",
pending.pid, pending.returncode)
del self.running[pending_fd]
+ else:
+ # It's still running, but there's some output
+ buffer = pending_fd.readline()
+ buffer = buffer.strip()
+ msg = "%d:(%d) %s" %(pending.pid, len(buffer), buffer)
+ logging.debug(msg)
time.sleep(1)