Python重用带参数的函数



你好,我想在需要回调函数时编写代码,但由于我的addr参数,我无法调用它,我需要帮助,谢谢

def send_magic_packet(addr):
# create socket
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SOBROADCAST, 1)
# parse address
mac = addr.upper().replace("-", "").replace(":", "")
if len(mac) != 12:
raise Exception("invalid MAC address format: {}".format(addr))
buf = b'f' * 12 + (mac * 20).encode()
# encode to magic packet payload
magicp = b''
for i in range(0, len(buf), 2):
magicp += struct.pack('B', int(buf_[i:i + 2], 16))
# send magic packet
print("sending magic packet for: {}".format(addr))
s.sendto(magicp, ('<broadcast>', DEFAULT_PORT))
while True:
send_magic_packet(addr)
data = aio.receive('feed')
if int(data.value) == 0:
print("PC Off")
if int(data.value) == 1:
print("PC ON")
Traceback (most recent call last):
File "D:/Documents/WOL.py", line 42, in <module>
send_magic_packet(addr)
NameError: name 'addr' is not defined

将调用时的地址替换为字符串或定义它。

while True:
addr = '192.168.2.323'
send_magic_packet(addr)

或者简单地说,

while True:
send_magic_packet('192.168.2.323')

您需要在函数定义之外定义addr

因此,例如

def send_magic_packet(addr):
# create socket
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SOBROADCAST, 1)
# parse address
mac = addr.upper().replace("-", "").replace(":", "")
if len(mac) != 12:
raise Exception("invalid MAC address format: {}".format(addr))
buf = b'f' * 12 + (mac * 20).encode()
# encode to magic packet payload
magicp = b''
for i in range(0, len(buf), 2):
magicp += struct.pack('B', int(buf_[i:i + 2], 16))
# send magic packet
print("sending magic packet for: {}".format(addr))
s.sendto(magicp, ('<broadcast>', DEFAULT_PORT))
# Define addr
# -----------
addr = "foo"
while True:
send_magic_packet(addr)
data = aio.receive('feed')
if int(data.value) == 0:
print("PC Off")
if int(data.value) == 1:
print("PC ON")

最新更新