我有一个调用Popen
的线程从命令行实用程序中获取字符串。在某些非常非常滞后的网络数据到达之前,此命令行功能不会返回。有时它可能需要几分钟,其他时间不到一秒钟。
如果用户想要,他们可以取消等待这些数据。在这种情况下,停止线程的正确方法是什么?
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()
答案 0 :(得分:3)
您可以通过调用p.terminate()
来终止子进程。这可以从另一个线程完成。
答案 1 :(得分: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()