无法在 Win10 中使用 CTRL+C 退出 python 脚本

问题描述

使用以下代码,我无法在运行后使用 CTRL+C 退出。我还尝试从不同的代码位置捕获 KeyboardInterrupt,但没有成功。我使用的是 Windows 10 x64 和 Python 3.7.6。

async def handle_req(self,reader: StreamReader,writer: StreamWriter):
    try:
        data = await reader.read()
        msg = data.decode()

        addr = writer.get_extra_info('peername')

        print(f"Received {msg!r} from {addr!r}")

        writer.write("Res".encode())
        writer.write_eof()
        await writer.drain()

        writer.close()
    except OSError:
        print("Client endpoint unreachable")


async def main():

    try:

        server = await asyncio.start_server(handle_req,"127.0.0.1",9000)
        addr = server.sockets[0].getsockname()
        print(f'Serving on {addr}')

        async with server:
            await server.serve_forever()

    except KeyboardInterrupt:
        server.close()
        server.wait_closed()
        raise


if __name__ == '__main__':
    try:
        loop = asyncio.get_event_loop()
        loop.run_until_complete(main())
    except KeyboardInterrupt:
        loop.stop()
        loop.close()

解决方法

您对键盘中断使用异常,因此请尝试导入 sys 和以下行

import sys

if __name__ == '__main__':
try:
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
except KeyboardInterrupt:
    loop.stop()
    loop.close()
    sys.exit()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...