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

时间:2011-03-31 06:51:21

标签: python pyserial

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

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,但是没有修复错误。有什么问题?

6 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

试试这个:

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()

并且在完成后不要忘记填写端口

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我有同样的问题。

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

它从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')

答案 4 :(得分:0)

我在OSX上遇到了这个问题,问题最终是不支持波特率。将波特率更改为更常见的东西并且有效!

答案 5 :(得分:0)

我遇到了同样的问题,虽然我使用的是一个5端口USB集线器,其中有3个不同的USB都插在其中,结果发现集线器没有提供足够的电量。一旦我得到一个外部供电的USB(一个不能从我的电脑端口拔下线路),它工作得很好。