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

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

通过使用此代码:

import socket, struct, fcntl

SIOCSIFADDR = 0x8916

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

def setIpAddr(iface, ip): 
    bin_ip = socket.inet_aton(ip)
    ifreq = struct.pack('16sH2s4s8s', iface, socket.AF_INET, '\x00'*2, bin_ip,'\x00'*8)
    fcntl.ioctl(sock, SIOCSIFADDR, ifreq)

setIpAddr('em1', '192.168.0.1')

我收到了

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

这里指的是哪个对象?

在你的字符串前加上 b 使它们成为像这样的字节:

ifreq = struct.pack('16sH2s4s8s', iface, socket.AF_INET, b'\x00' * 2, bin_ip, b'\x00' * 8)

setIpAddr(b'em1', '192.168.0.1')