fcgi py 從python2 x到3 x的移植

2021-05-18 07:55:10 字數 719 閱讀 7165

python推出3.x版本已經有很長一段時間了,許多第三方模組卻都還沒有開始完全支援3.x版本。一直奇怪為什麼第三方py模組的更新速度這麼慢,今天我終於真正體會了一把。

出於對py標準化組織的信任,我決定以後做事情都用python3來搞,因此在做乙個web框架時,考慮到從fastcgi+ngnix來搭建。但是      django使用的fcgi.py檔案並不支援python3.x。沒辦法,決定自己移植。

由於fcgi.py檔案並不大,因此早晨的時候躊躇滿志,以為能夠三下五除二將移植工作搞定。調整了幾個小的地方,如函式的新名字、變更後的所屬模組後,執行python fcgi.py,程式能夠正常執行。但是就是無法獲得ngnix甩過來的流量,後來通過跟蹤原始碼,發現是py3.x中str和bytes兩種資料型別要求更嚴格所產生的異常導致,做了顯示轉換後,問題解決。fcgi.py能夠獲得流量了,但是新的問題出來了,網頁送過來的客戶端資訊資料被粘連在一塊,沒有被fcgi正確解析,這個問題很好定位,ngnix通過socket方式將客戶端引數組包後send給fcgi,fcgi在解析這些資訊時,用struct模組的unpack函式進行解析,但是由於unpack函式中str、bytes以及字元長度等問題的交叉纏繞,這種大調整正是python3.x顯著不同於python2.x的地方,此類問題集中在fcgi.py的decode_pair函式中,重寫了這個函式後,問題解決。

至此,移植過程結束,算下來,花去了我13個小時的時間。收穫就是,對ngnix+fastcgi的原理有了一些了解。

Python2 X輸入函式

mystr raw input 請輸入指令 import os os.system mystr 執行結果 ps input返回的是數值型別,如int,float raw inpout返回的是 字串型別 string型別 若輸入是表示式,則input會計算出表示式的值,而raw input會原樣輸出 ...

Python2 x中文亂碼問題

python中亂碼問題是乙個很頭痛的問題。在python3中,對中文進行了全面的支援,但在python2.x中需要進行相關的設定才能使用中文。否則會出現亂碼 問題原因 在python2.x中主要是字元編碼的問題,處理不好的話,會導致亂碼。python預設採取的ascii編碼,字母 標點和其他字元只使...

Python2 x 中文亂碼問題

python 檔案中如果未指定編碼,在執行過程會出現報錯 usr bin pythonprint 你好,世界 以上程式執行輸出結果為 file test.py line 2syntaxerror non ascii character xe4 in file test.py on line 2,bu...