2014-04-12 29 views
0

現在,我正在編寫一個python SMTP腳本。如何讓Python在打印語句中用 r n創建新行?

status = clientSocket.recv(1024) 
print (status) 

當蟒蛇打印status,我得到:

b'250-mx.google.com at your service, [107.216.175.252]\r\n250-SIZE 35882577\r\n250-8BITMIME\r\n250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN\r\n250-ENHANCEDSTATUSCODES\r\n250 CHUNKING\r\n' 

不過,我想蟒蛇把\r\n到實際的新生產線,而不是僅僅把它打印出來作爲一個巨大的線。我會如何去做這件事?

+3

'print(str(status))'? – jonrsharpe

+0

這不起作用(或者它只是我?) – user2837858

+0

哪個版本的Python? – jonrsharpe

回答

2

status有字節類型,所以你需要將它解碼爲字符串。

2種明顯的方式來實現這一目標:

  1. print(status.decode())
  2. print(str(status, 'utf-8'))

.decode默認的編碼是UTF-8,所以如果你想使用一個不同的,做status.decode(encoding) 。 和status.decode(encoding)確切等價於str(status, encoding)

爲什麼只是str(status)不工作:

documentation on str function:返回非正式的第一種情況下

傳遞一個字節對象STR()沒有編碼或錯誤 參數下降字符串 表示。例如:

>>> str(b'Zoot!') 
"b'Zoot!'" 
2
>>> print(status.decode()) 
250-mx.google.com at your service, [107.216.175.252] 
250-SIZE 35882577 
250-8BITMIME 
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN 
250-ENHANCEDSTATUSCODES 
250 CHUNKING 

你在Python 3中默認爲unicode,但是你有一個老套接字的字節串。你只需要decode它,然後print將像往常一樣擺脫換行符。

+0

什麼是「old樣式「關於字節串?他們有他們的用途,他們將永遠有他們的用途。 – glglgl

+0

事實上,它們在Python 2中是默認的,不再在Python 3中。反問題:舊的意味着什麼意味着沒用? (我仍然每天使用「tar磁帶存檔器**」,它已經30歲了,仍然可以正常工作。) –

+0

mmm ...你說得對。 – glglgl