在Python中使用子进程时,FileIO乱序

时间:2010-06-14 23:44:03

标签: python multithreading redirect

我正在尝试按顺序生成包含信息的日志文件。这就是我所拥有的:

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()

我正在执行的命令在最后有这个重定向:“2>& 1” 当我运行这个时,我得到了第一个列出的消息“Executing blah”之前的子进程的输出!我认为lock()会修复它,但不会。

请帮忙,如果有人能指出我的错误,我真的很感激。

1 个答案:

答案 0 :(得分:0)

默认情况下,I / O是缓冲的。在sys.stdout.write()之后尝试sys.stdout.flush()。