views:

11

answers:

1

I am trying to generate a log file with information in order. This is what I have:

class ExecThread(threading.Thread):
 def __init__(self, command):
  self.command = command
  self._lock = threading.Lock()
  threading.Thread.__init__ ( self )

 def run ( self ):
  self._lock.acquire()
  sys.stdout.write(''.join(["Executing: ",self.command,'\n']))
  log_file.write(''.join([self.command,'\n']))
  os.system(self.command)
  self._lock.release()

for ive in locate('*.ive', root_dir):
  command = "osgconv"
  command = ''.join([command,' ',"-O OutputTextureFiles",' ', infile,' ', outfile,' ',"2>&1"])

  conv_osg_thread = ExecThread(command)
  conv_osg_thread.start()
  conv_osg_thread.join()

The command I am executing has this redirection at the end: "2>&1" When I run this I get the output of the subprocess before the message "Executing blah", which is listed first! I thought the lock() would fix it, but no.

Please help, I would really appreciate if someone could point out my error.

A: 

I/O is buffered by default. Try sys.stdout.flush() after sys.stdout.write().

dmazzoni
Ah thanks! That was easy.
Gareth