我正在尝试使用 pyFirmata,但我无法让它工作。即使是最基本的库也不起作用。我猜库代码有问题。
from pyfirmata import Arduino,util
import time
port = 'COM5'
board = Arduino(port)
我收到此错误:
Traceback (most recent call last):
File "c:\Users\Public\pythonpublic\arduino.py", line 5, in <module>
board = Arduino(port)
^^^^^^^^^^^^^
File "C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\__init__.py", line 19, in __init__
super(Arduino, self).__init__(*args, **kwargs)
File "C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\pyfirmata.py", line 101, in __init__
self.setup_layout(layout)
File "C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\pyfirmata.py", line 157, in setup_layout
self._set_default_handlers()
File "C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\pyfirmata.py", line 161, in _set_default_handlers
self.add_cmd_handler(ANALOG_MESSAGE, self._handle_analog_message)
File "C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\pyfirmata.py", line 185, in add_cmd_handler
len_args = len(inspect.getargspec(func)[0])
^^^^^^^^^^^^^^^^^^
AttributeError: module 'inspect' has no attribute 'getargspec'. Did you mean: 'getargs'?
正如另一个答案中已经指出的,pyFirmata 模块目前已记录在 Python 2.7、3.6 和 3.7 上运行。这并不意味着它不能在其他版本上运行,但可能是作者尚未在其他版本上进行测试并且不受官方支持。因此它可能适用于较新的 Python 版本,也可能不适用于。
您的错误消息是由于缺少功能导致的
inspect.getargspec()
。该函数是 Python 标准库的一部分,但自 Python 3.0(2008 年发布)以来已被弃用。不幸的是,作者没有意识到这一点,或者根本没有费心去修复它,所以现在代码不再适用于最新版本的 Python。
在Python文档中,您可以看到该函数在版本3.10中仍然可用,但在版本3.11中不再可用。
要解决这个问题,您有多种选择:
降级到 3.7 到 3.10 之间的 Python 版本无疑是最简单的选择,向作者留下一些反馈将使您有机会在将来修复该问题,以防您计划更长时间地使用脚本。
根据 pyFirmata 文档的第一行:
它运行在 Python 2.7、3.6 和 3.7 上
您正在使用Python 3.11。自 Python 3.7 以来,
inspect
(核心库模块)已发生变化。
更换
len_args = len(inspect.getargspec(func)[0])
与
len_args = len(inspect.getfullargspec(func)[0]