我有一個正在監聽套接字的python腳本。
代碼看起來是這樣的:Python不會比較字符串
def clientthread(conn):
while True:
data = conn.recv(1024)
if data == 'quit':
我連接到使用telnet服務器。當我發送退出時,「if data =='之後的代碼退出」:「不執行。哪裏不對?
我有一個正在監聽套接字的python腳本。
代碼看起來是這樣的:Python不會比較字符串
def clientthread(conn):
while True:
data = conn.recv(1024)
if data == 'quit':
我連接到使用telnet服務器。當我發送退出時,「if data =='之後的代碼退出」:「不執行。哪裏不對?
如果您刪除換行符,最有可能的情況是大多數情況下都會起作用。
但是:如果您想獲得任何可靠性,您不能僅僅接受recv的輸出並將其與命令進行比較。操作系統可能會以任何想要的方式將數據拆分成更多或更少的部分。所以你可以分別獲得'qu'和'it \ n'。你真的需要緩存recv的返回值,並使用例如startswith來匹配下一個命令並刪除執行的命令。
而且上校三十二個在評論說,如果你是期運用Python 3.x都有他們是字節串,所以你需要比較的字節串爲B「跳槽」
試圖通過將其轉換爲一個str
data.decode("utf-8")
。目前它是一個bytes
對象。
你是個好人。您已解決我的問題,謝謝! –
如果你正在使用Python 2.X,然後,在比較之前或許剝離接收到的數據,這將有助於:
def clientthread(conn):
while True:
data = conn.recv(1024)
if data.strip() == 'quit':
如果你正在使用Python 3.X,那麼socket.recv()返回值是一個表示接收到的數據的字節對象。因此,在進行比較之前,您應該將其轉換爲字符串:
def clientthread(conn):
while True:
data = conn.recv(1024)
if data.decode('UTF-8').strip() == 'quit':
如果以上都不幫助您,請告訴我。
'conn.recv'返回一個'bytes'對象,而不是一個字符串。 –
此外,您可能正在鍵入一個回車符和/或換行符,這也將被髮送,(最多1024個字符)。更好地打印(repr(數據))以查看您真正收到的內容。 – swstephe
你使用Python 2.X還是3.X? – s16h