http://www.mitbbs.com/article_t/Programming/31501943.html
发信人: flamingoo (flamingo), 信区: Programming
  标  题: 请教一个python下面popen的问题
  发信站: BBS 未名空间站 (Fri Apr 28 12:09:00 2017, 美东)
  
  
  也许对很多大牛来说是一个比较老的问题,不过对我来说是一个新问题。
  
  起因是想从一个video文件在任意时间点读取图像出来。 最开始是用opencv实现的,在
  一些文件上测试也没有问题。后来换了一批h264格式的video文件就有问题了,很多文
  件读取不出来。 在网上查了一下后,换成用moviepy来读取。 但是现在有新的问题是
  就是moviepy在读取有些video文件在初始化阶段就死锁了。 跟踪进去,发现问题主要
  出现在:
  
  s = self.proc.stdout.read(nbytes) 语句时。 
  
  这个之前还有一堆初始化的代码, 主要是调用ffmpeg来执行并声称一个pipe. 
     def initialize(self, starttime=0):
          """Opens the file, creates the pipe. """
  
          self.close() # if any
  
          if starttime != 0 :
              offset = min(1, starttime)
              i_arg = ['-ss', "%.06f" % (starttime - offset),
                       '-i', self.filename,
                       '-ss', "%.06f" % offset]
          else:
              i_arg = [ '-i', self.filename]
  
  
          cmd = ([get_setting("FFMPEG_BINARY")]+ i_arg +
                  ['-loglevel', 'error',
                  '-f', 'image2pipe',
                  "-pix_fmt", self.pix_fmt,
                  '-vcodec', 'rawvideo', '-'])
  
          popen_params = {"bufsize": self.bufsize,
                          "stdout": sp.PIPE,
                          "stderr": sp.PIPE,
                          "stdin": DEVNULL}
  
          if os.name == "nt":
              popen_params["creationflags"] = 0x08000000
          self.proc = sp.Popen(cmd, **popen_params)
  
  网上查了一下,这是一个老问题了, 好像用popen.stdout.read 造成死锁很容易发生
  ,但是解决方法没有一个统一的说法。 不知道各位大牛有没有相关的经验,或者提供
  别的解决方法也行。
  
  另外,现在系统是在windows下用的,所有有些linux下面的解决方案也不适用。
  
  
  
  
  
  
  
  --
  ※ 修改:·flamingoo 於 Apr 28 12:12:20 2017 修改本文·[FROM: 23.]
  	  
评论
发表评论