cmd运行程序时如何终止python socket服务端程序的操作,pythonsocket,用python写了一个s


用python写了一个socket服务端的程序,但是启动之后由于监听连接的是一个死循环,所以不知道怎样在cmd运行程序的时候将其终止。

#!/usr/bin/python# -*- coding: utf-8 -*-import socketimport threading, timedef tcplink(sock,addr):    print('Accept new connection from %s:%s...' %addr)    sock.send(b'Welcome!')    while True:        data=sock.recv(1024)        time.sleep(1)        if not data or data.decode('utf-8')=='exit':            break        sock.send(('Hello,%s!'% data.decode('utf-8')).encode('utf-8'))    sock.close()    print('Connection from %s:%s closed.' % addr)    s=socket.socket()s.bind(('127.0.0.1',1234))s.listen(5)print('Waiting for conection...')while True:    #accept a new connection    sock,addr=s.accept()    #create a new thread    t=threading.Thread(target=tcplink,args=(sock,addr))    t.start()

在win10上的cmd运行后的情况是按ctrl+c,ctrl+z,ctrl+d都不能终止,请问要怎么终止程序?

关闭cmd命令窗口,重新开启一个cmd,我是这么做的。

可以使用signal模块,当按住Ctrl+C时,捕捉信息,然后退出.

#!/usr/bin/env python# -*- coding: utf-8 -*-import signaldef do_exit(signum, frame):    print("exit ...")    exit()signal.signal(signal.SIGINT, do_exit)while True:    print("processing ...")

Ctrl + C

kill -9

我记得可以

try:    ......except KeyboardInterrupt:    exit()

在启动线程之前,添加 setDaemon(True)

while True:    #accept a new connection    sock,addr=s.accept()    #create a new thread    t=threading.Thread(target=tcplink,args=(sock,addr))    t.setDaemon(True)  # <-- add this    t.start()    

这样 <C-c> 的中断信号就会被 rasie。

编橙之家文章,

评论关闭