2011-12-09 19 views
1

私はPopenを呼び出して、コマンドラインユーティリティから文字列を戻すスレッドを持っています。非常に遅いネットワークデータが到着するまで、このコマンドライン機能は戻りません。場合によっては数分かかる場合もあります。popenを待っているpythonスレッドを停止しますか?

ユーザーが望む場合、このデータの待機をキャンセルできます。この場合、スレッドを停止する正しい方法は何ですか?

class CommThread(threading.Thread): 

    def __init__(self): 
     self.stdout = None 
     self.stderr = None 
     self.command = None 
     threading.Thread.__init__(self) 

    def run(self): 
     if self.command is not None: 
      p = Popen(self.command.split(), shell=False, stdout=PIPE, stderr=PIPE) 
      self.stdout, self.stderr = p.communicate() 

答えて

2

利用Popen.terminate()ここでhttp://docs.python.org/library/subprocess.html

あなたのコードは次のようにあるべき文書です:

def run(self): 
    if self.command is not None: 
     self.process = Popen(self.command.split(), shell=False, stdout=PIPE, stderr=PIPE) 

def stop(self): 
    if self.process is not None: 
     self.process.terminate() 

あなたが他のコードブロック

でCommThread.stop()を呼び出すことができますが、
3

p.terminate()を呼び出すことによって、子プロセスを終了することができます。これは別のスレッドから行うことができます。

関連する問題