问题描述
我遵循了 https://coral.ai/docs/dev-board/get-started/
中描述的 Windows 主机说明当我运行命令 mdt devices 时,我总是得到以下异常:
$ mdt devices
Traceback (most recent call last):
File "c:\users\ram\anaconda3\lib\runpy.py",line 194,in _run_module_as_main
return _run_code(code,main_globals,None,File "c:\users\ram\anaconda3\lib\runpy.py",line 87,in _run_code
exec(code,run_globals)
File "C:\Users\Ram\AppData\Roaming\Python\python38\Scripts\mdt.exe\__main__.py",line 7,in
<module>
File "C:\Users\Ram\AppData\Roaming\Python\python38\site-packages\mdt\main.py",line 162,in
main
exit(command.run(sys.argv[1:]))
File "C:\Users\Ram\AppData\Roaming\Python\python38\site-packages\mdt\devices.py",line 43,i
n run
self.discoverer.discover()
File "C:\Users\Ram\AppData\Roaming\Python\python38\site-packages\mdt\discoverer.py",line 40,in discover
self.zeroconf = Zeroconf()
File "C:\Users\Ram\AppData\Roaming\Python\python38\site-packages\zeroconf\__init__.py",line
2508,in __init__
self._listen_socket,self._respond_sockets = create_sockets(
File "C:\Users\Ram\AppData\Roaming\Python\python38\site-packages\zeroconf\__init__.py",line
2343,in create_sockets
respond_socket = new_respond_socket(i,apple_p2p=apple_p2p)
File "C:\Users\Ram\AppData\Roaming\Python\python38\site-packages\zeroconf\__init__.py",line
2302,in new_respond_socket
respond_socket = new_socket(
File "C:\Users\Ram\AppData\Roaming\Python\python38\site-packages\zeroconf\__init__.py",line
2250,in new_socket
s.bind((bind_addr[0],port,*bind_addr[1:]))
OSError: [WinError 10049] The requested address is not valid in its context
我的设置版本:
$ python --version
Python 3.8.5
$ mdt version
MDT version 1.5.2
你能帮我解决这个问题吗?
解决方法
同样的事情发生在我身上。跳过一些 IP 地址解决了这个问题。试试这个代码:
import logging
import zeroconf
import ifaddr
for adapter in ifaddr.get_adapters():
print("IPs of network adapter ",adapter.nice_name)
for ip in adapter.ips:
print(" %s/%s",ip.ip,ip.network_prefix)
logging.basicConfig(level=logging.DEBUG)
logging.getLogger("zeroconf").setLevel(level=logging.DEBUG)
z = zeroconf.Zeroconf()
从日志中,找到
INFO:zeroconf:Add XXX.XXX.XX.XX 到多播组时地址不可用,预计在某些系统上会发生
与 Zeroconf 日志一起,应该有一个 ip 地址和名称列表。请找出导致问题的硬件名称。
现在,打开 zeroconf/__init__.py
并转到 get_all_addresses()
并用下面的代码替换
adapters = [x for x in ifaddr.get_adapters()
if not "Microsoft Wi-Fi Direct Virtual Adapter" in x.nice_name
and not "Bluetooth Device" in x.nice_name]
return list(set(addr.ip for iface in adapters for addr in iface.ips if addr.is_IPv4))
请将“Microsoft Wi-Fi Direct Virtual Adapter”和“Bluetooth Device”替换为适当的名称。
这不是一个巧妙的方法,所以我愿意接受更好的答案。