У меня есть этот код:
import socket
import concurrent.futures
import time
HEADERSIZE = 10
def init_server(port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), port))
s.listen(5)
with concurrent.futures.ThreadPoolExecutor() as executor:
executor.submit(init_client, port)
while True:
clientsocket, address = s.accept()
print('server:', address)
msg = 'Welcome from server: hello client, how are you?'
msg = f'{len(msg):<{HEADERSIZE}}' + msg
clientsocket.send(bytes(msg, 'utf-8'))
def init_client(server_port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), server_port))
time.sleep(3)
print('client: awake')
full_msg = ''
new_msg = True
while True:
msg = s.recv(16)
if new_msg:
new_msg = False
msglen = int(msg[:HEADERSIZE])
raise KeyError('error raised')
full_msg += msg.decode('utf-8')
# print('Client: ', full_msg)
if len(full_msg)-HEADERSIZE == msglen:
print(full_msg[HEADERSIZE:])
new_msg = True
full_msg = ''
if __name__ == '__main__':
PORTS = (10_101, 10_002)
init_server(PORTS[1])
«stdout» клиентского потока отображается в терминале. Но любая ошибка в потоке (вызванная этим оператором повышения) не отображается в терминале. Как я могу увидеть ошибки в ветке? Могу ли я каким-то образом принудительно отобразить ошибку в выходном терминале (который запускал код)?
Если это имеет значение, я работаю на Ubuntu.