Python 如何在CTRL+;C

Python 如何在CTRL+;C,python,multithreading,python-2.7,sockets,python-3.x,Python,Multithreading,Python 2.7,Sockets,Python 3.x,我有一个python多线程程序,我想在CTRL+C(或Z)之后关闭套接字。我试过了,但都没有成功 尝试重新运行程序时,出现错误消息: 绑定失败。错误代码:98消息地址已被调用 回溯(最近一次调用last):文件“main.py”,第16行,在 main.connection.close()name错误:未定义名称“main” 来自文档:键盘中断继承自BaseException,这样就不会被捕获异常的代码意外捕获,从而阻止解释器退出 我建议您使用atexit模块来处理这些内容。 只要把这一行放在\

我有一个python多线程程序,我想在CTRL+C(或Z)之后关闭套接字。我试过了,但都没有成功

尝试重新运行程序时,出现错误消息:

绑定失败。错误代码:98消息地址已被调用 回溯(最近一次调用last):文件“main.py”,第16行,在 main.connection.close()name错误:未定义名称“main”


来自文档:键盘中断继承自BaseException,这样就不会被捕获异常的代码意外捕获,从而阻止解释器退出


我建议您使用
atexit
模块来处理这些内容。 只要把这一行放在
\uuuu init\uuuu
中,在任何python进程终止的情况下,连接就会关闭

atexit.register(self.close) 

它可以工作,但是在设备连接之后,finally中的代码会立即被调用,并在不按CTRL+C的情况下关闭连接。尝试添加到add-main.connection.run()尝试阻止它非常有趣:如果我将main.connection.run()添加到Try块中,设备就会连接,按ctrl+c后,finally中的代码不会被调用:Oself.connection.start()。在哪里启动方法?它启动线程。但是在将main.connection.run()添加到try块后,它被从构造函数中删除
if __name__ == '__main__':  
    try:
       main = Main()
    except KeyboardInterrupt:
        pass
    finally:
        main.connection.close()
atexit.register(self.close)