簡體   English   中英

struct.error:'s'的參數必須是python 3.4中的bytes對象

[英]struct.error: argument for 's' must be a bytes object in python 3.4

代碼我試圖在python 3.4中使用:

#!/usr/bin/python3
 def get_mac_addr(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    info = fcntl.ioctl(s.fileno(), 0x8927,  struct.pack('256s', ifname[:15]))
    return ''.join(['%02x:' % ord(char) for char in info[18:24]])[:-1]
 print (get_mac_addr('eth0'))

Error: struct.error: argument for 's' must be a bytes object

我看到這段代碼在不使用python3的情況下確實有效,但我的項目需要3。 我嘗試比較問題: Struct.Error,必須是字節對象? 但是我看不出我怎么能把它應用到自己身上。

您需要將ifname字符串轉換為字節。 您也不需要調用ord(),因為ioctl返回字節,而不是字符串:

...
info = fcntl.ioctl(s.fileno(), 0x8927,  struct.pack('256s', bytes(ifname[:15], 'utf-8')))
return ''.join(['%02x:' % b for b in info[18:24]])[:-1]
...

有關python3中字符串和字節的更多信息,請參閱此SO問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM