開發中遇到的一些問題彙總

buffer中內容的decode

使用paramiko執行遠程ssh命令返回後,若是用stdout讀了返回的內容,對其進行解碼時,會由於遠端的系統語言字符集和本地不一致,致使EncodeErr錯誤。解決方法python

def ssh_and_exec(ip,username,passwd,cmd):

    try:
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(ip,22,username,passwd,timeout=5)
        stdin,stdout,stderr=ssh.exec_command(cmd)
        if stdout != None:
            #out = stdout.readlines()
            buf = stdout.read()
            ret_list=buf.decode('ascii','replace').split('\n')
            ssh.close()
            print "ssh to %s and exec:%s ok"%(ip,cmd)
            return ret_list
        if stderr != None:
            print stderr
            ssh.close()
            return None    
    except Exception :
        print "ssh to %s login:%s passwd:%s error "%(ip,username,passwd)

 

json.dumps的編碼問題

json.dumps處理非ascii時,會出錯,解決方法以下:json

out=json.dumps(policys_dict,ensure_ascii=False)

 

不一樣字符集間的轉換處理

先用decode統一轉成unicode,再encode轉成對應的字符集。ssh

image

 

查看內存

image

 

python對象的特色

python中變量至關於C語言中的指針,=的右值是實際的對象。編碼

string  tuple number是不可修改實參的對象。spa

list  dict 是可修改實參的對象。list  dict傳入參後,對入參進行局部修改,能夠改變實參對象的值,若是對入參進行總體對象賦值,實際上是進程裏生成了一個新的對象,原來實參的內容沒有變化。全局變量也是如此,注意!!3d

image

 

打印二進制串

key_id=sip+dip+packet_id+tlen+cs
print "%s,%f" %(key_id.encode('hex'),tuple_info[key_id])

 

 

轉義字符的處理

(1)雙引號,單引號內,若是有特殊字符,須要加上 \ 轉義符,   「」」adsfa 「」」 三引號註釋裏,能夠不加指針

(2)不想讓轉義字符生效,咱們只想顯示字符串原來的意思,這就要用r和R來定義原始字符串,如print r'\t\r' ,就打印   \t\r   code

image

相關文章
相關標籤/搜索