无法在 Pyserial 中打开串行连接:“termios.error: (22, 'Invalid argument')”

Posted

技术标签:

【中文标题】无法在 Pyserial 中打开串行连接:“termios.error: (22, \'Invalid argument\')”【英文标题】:Can't open serial connection in Pyserial: "termios.error: (22, 'Invalid argument') "无法在 Pyserial 中打开串行连接:“termios.error: (22, 'Invalid argument')” 【发布时间】:2011-03-31 06:51:21 【问题描述】:

我在执行以下代码时遇到问题:

import serial

ser = serial.Serial(
    port='/dev/tty.FireFly-16CB-SPP',
    baudrate=115200,
    #parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)

ser.open()
ser.isOpen()

这昨天有效,我不知道我改变了什么。现在我收到以下错误消息:

    Traceback (most recent call last):
  File "main.py", line 32, in <module>
    bytesize=serial.EIGHTBITS
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/serial/serialutil.py", line 260, in __init__
    self.open()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/serial/serialposix.py", line 280, in open
    self._reconfigurePort()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/serial/serialposix.py", line 409, in _reconfigurePort
    termios.tcsetattr(self.fd, TERMIOS.TCSANOW, [iflag, oflag, cflag, lflag, ispeed, ospeed, cc])
termios.error: (22, 'Invalid argument')

我完全是 Python 初学者,无法破译上面的错误信息。我尝试重新安装 Pyserial,但这并没有解决错误。怎么了?

【问题讨论】:

【参考方案1】:

端口还在吗?我是/dev/tty.FireFly-16CB-SPP。今天它可能有一个新名字......

【讨论】:

是的,通过查看 /dev/ 我看到端口仍然存在。 这可能也值得尝试旧的“关闭并再次打开” - 即拔下 USB 并重新插入。这在我的情况下解决了。【参考方案2】:

试试这个:

ser = serial.Serial('/dev/tty.FireFly-16CB-SPP',115200)
print "port is open" if ser.isOpen() else "port is closed"

除非您手动更改端口的配置,否则您不必调用 open() 例如:

ser = serial.Serial()
ser.baudrate = 19200
ser.port = 0
ser.open()

完成后不要忘记清理端口

【讨论】:

【参考方案3】:

重新安装 Python 并降级到 2.6 解决了所有问题。

【讨论】:

【参考方案4】:

我也有同样的问题。

只需从 pySerial 示例 (http://sourceforge.net/projects/pyserial/develop) 运行 miniterm.py。

从 shell 运行良好:python miniterm -p ttyUSB0 -D 但是当试图将它加载到 Eclipse 中时。并从那里运行调试。 它给了我:

pydev debugger: starting
Traceback (most recent call last):
  File "/eclipse/plugins/org.python.pydev.debug_2.0.0.2011040403/pysrc/pydevd.py", line 1134, in <module>
    debugger.run(setup['file'], None, None)
  File "/eclipse/plugins/org.python.pydev.debug_2.0.0.2011040403/pysrc/pydevd.py", line 918, in run
    pydev_imports.execfile(file, globals, locals) #execute the script
  File "/root/workspace/pyserial/src/examples/miniterm.py", line 120, in <module>
    console.setup()
  File "/root/workspace/pyserial/src/examples/miniterm.py", line 101, in setup
    self.old = termios.tcgetattr(self.fd)
termios.error: (22, 'Invalid argument')

【讨论】:

【参考方案5】:

我在 OSX 上遇到了这个问题,问题最终是不支持波特率。将波特率更改为更常见的值,它起作用了!

【讨论】:

【参考方案6】:

我遇到了同样的问题,虽然我使用的是一个 5 端口 USB 集线器,其中 3 个不同的 USB 都插入其中,结果发现集线器没有提供足够的电力。一旦我得到了一个外部供电的 USB(不仅仅是从我的计算机端口拔下线的那个),它就可以正常工作了。

【讨论】:

以上是关于无法在 Pyserial 中打开串行连接:“termios.error: (22, 'Invalid argument')”的主要内容,如果未能解决你的问题,请参考以下文章

重新打开后,arduino 和 pyserial 之间的串行连接变慢

无法使用 python 和 pyserial 打开 /dev/ttyusb0

PySerial 报告看似未使用的串行端口的“资源忙”

尝试在 WinXP 上使用 pyserial 打开串行端口 - >“拒绝访问”

可以在网站上使用 pySerial 打开并将数据发送到本地计算机上的串行端口吗?

使用pyserial测试usb到串口到usb没有输出