2016-06-24 19 views
0

ffmpegがいつ終了したかを知る方法が必要です。ここに私ですcodePythonのサブプロセス:コマンドが終了したときを知る

def on_button_clicked(self, button, progress_bar, filename): 
    self.execute(progress_bar, filename) 
    progress_bar.set_text('Encoding') 
    progress_bar.pulse() 

def execute(self, progress_bar, filename): 

    cmd = ['ffmpeg', '-y', 
     '-i', filename, 
     '-r', '30', 
     '/tmp/test-encode.mkv'] 

    process = sp.Popen(cmd, stdin=open(os.devnull)) 

    progress_bar.set_text('Done') 

'完了'は決して表示されません。しかし、仕事は終わった。私はffmpegが完了したことをシェルウィンドウで見ることができます。私はどのようにシグナルを得ることができますか?

+0

は本当に '' STDIN =オープン(os.devnull)であります必要? ffmpegはkbd入力を必要としませんか?したがって、 'stdin'をリダイレクトする本当の理由はありません。私は 'Popen'(おそらく私のせい)でいくつかの問題を抱えていて、' check_output'のようなもっと単純なバージョンを好んでいます。 – jcoppens

+0

はい、あります。実行すると、ffmpegはキーボードをリッスンします。具体的には "q"がプロセスを中止します。それを無効にすることは傷つけません。 – yPhil

答えて

0

は、私はそれをやってしまった方法です:

p = sp.Popen(command, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) 

    def mycallback(p): 
     p.poll() 
     if p.returncode is None: 
      # Waiting for Godot 
      return True 
     else: 
      # Yay, wait is over! 
      return False 

    GObject.timeout_add(1000, mycallback, p) 
0

はset_text後に保留中のイベントを処理するためにGTKを強制するようにしてください:ここで

## force the refresh of the screen 
     while gtk.events_pending(): 
      gtk.main_iteration() 
関連する問題