亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Python 中鍵入輸入時在控制臺上打印

在 Python 中鍵入輸入時在控制臺上打印

DIEA 2021-08-05 18:28:28
我正在嘗試用 Python 編寫一個聊天應用程序作為學校項目。它應該從服務器接收消息,同時,它還應該能夠向該服務器發送消息。為了做到這一點,我創建了兩個線程:一個等待傳入的消息,另一個接收我的輸入以發送出去。問題是它無法打印來自服務器的消息,因為另一個線程總是要求輸入。有沒有辦法讓消息接收線程在輸入函數要求輸入時打印傳入的消息?下面是代碼中比較麻煩的部分:def sendmsg(conn):    while True:        msg=input("Your message: ")        conn.send(bytes(msg,"utf-8"))def getmsg(conn):    while True:        data=conn.recv(1024)        print(data.decode("utf-8"))def server():    soket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)    soket.bind((HOST,PORT))    soket.listen()    print("Listining")    conn, addr = soket.accept()    print("Connection established!")    send = threading.Thread(target = sendmsg(conn))    get = threading.Thread(target = getmsg(conn))    get.start()    send.start()
查看完整描述

1 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

基本問題在于以下兩行:


send = threading.Thread(target = sendmsg(conn))

get = threading.Thread(target = getmsg(conn))

Python 中的函數對象sendmsg和調用該對象的結果之間存在很大差異sendmsg(conn)。


該Thread對象send永遠不會被創建,更不用說啟動了,因為您嘗試傳入的參數是 call 的結果sendmsg(conn),但該函數永遠不會返回。那時您已經有效地進入了一個無限循環,總是在主線程中要求用戶輸入。


相反,您應該傳入sendmsg函數對象,并使用args參數Thread來讓它知道您想在調用時傳入一個額外的參數。這同樣適用于getmsg:


send = threading.Thread(target=sendmsg, args=(conn,))

get = threading.Thread(target=getmsg, args=(conn,))

小心在 中包含逗號args=(conn,),否則參數不會被解釋為元組。如果您愿意,可以改用列表:args=[conn]。


查看完整回答
反對 回復 2021-08-05
  • 1 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號