笔者在用pyserial打开虚拟串口时出现了一些问题,最后发现是python版本的问题,现将几种情况总结如下
1.实际串口

#查询串口号
geek@geek-Lenovo-G40-70:~/Documents/RaspberryPi$ dmesg | grep  ttyUSB*
[ 1642.241139] usb 2-2: ch341-uart converter now attached to ttyUSB0

如果用的是python2.7.9的话要这样写:

[python2.7.9]
#!/usr/bin/python
import os,serial
#打开串口
ser=serial.Serial("/dev/ttyUSB0")
#写入
ser.write("nani?")

运行正常不报错。

如果用的是python3.5的话要这样写:

[python3.5]
#!/usr/bin/python3
import os,serial
#打开串口
ser=serial.Serial("/dev/ttyUSB0")
#写入.注意要加encode(),否则报错
ser.write("nani?".encode())

运行正常不报错。

如果不加encode()的话会报错如下:

Traceback (most recent call last):File "testSingleCom.py", line 8, in <module>ser.write("nani?")File "/home/geek/.local/lib/python3.5/site-packages/serial/serialposix.py", line 529, in writed = to_bytes(data)File "/home/geek/.local/lib/python3.5/site-packages/serial/serialutil.py", line 63, in to_bytesraise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
TypeError: unicode strings are not supported, please encode to bytes: 'nani?'

2.虚拟串口
如果是python2.7.9的话要这样写:

[python]
import os, pty, serial
#创建一个虚拟串口
master, slave = pty.openpty()
s_name = os.ttyname(slave)
#连接该虚拟串口
ser = serial.Serial(s_name, rtscts=True,dsrdtr=True)
#写入
ser.write("nani?")

运行正常不报错。

如果写成ser = serial.Serial(s_name),则会报错

Traceback (most recent call last):File "testSingleCom.py", line 4, in <module>ser = serial.Serial(s_name )File "/usr/lib/python2.7/dist-packages/serial/serialutil.py", line 180, in __init__self.open()File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 311, in openself._update_dtr_state()File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 605, in _update_dtr_statefcntl.ioctl(self.fd, TIOCMBIS, TIOCM_DTR_str)
IOError: [Errno 22] Invalid argument

如果是python3.5的话要这样写:

import os, pty, serial
#创建一个虚拟串口
master, slave = pty.openpty()
s_name = os.ttyname(slave)
#连接该虚拟串口
ser = serial.Serial(s_name)
#或者这样也行
#ser = serial.Serial(s_name, rtscts=True,dsrdtr=True)
#写入
ser.write("nani?".encode())

运行正常不报错。

总结:
1.python3.5的write函数要encode,pyhon2.7不用
2.python2.7如果要连接虚拟串口,要加rtscts=True,dsrdtr=True
具体原理笔者也不是很清楚,望前辈赐教

不同python版本在使用pyserial的一些使用区别相关推荐

  1. 多版本python共存,安装三方库到指定python版本 多Python版本和虚拟环境

    多个Python版本:在同一台机器上安装不同的Python,例如2.7和3.4. 虚拟环境:独立的环境,既可以同时安装特定版本的Python,也可以安装任何特定于项目的软件包,而不会影响任何其他项目. ...

  2. 适合win7的python版本_windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2...

    windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2 1.官网下载python3.6.2 https://www.python.org/ftp/ ...

  3. linux python版本_linux下更新Python版本并修改默认版本

    linux下更新Python版本并修改默认版本,有需要的朋友可以参考下. 很多情况下拿到的服务器python版本很低,需要自己动手更改默认python版本 1.从官网下载python安装包(这个版本可 ...

  4. 如何管理多个Python版本和虚拟环境

    Addition January 2019: If you are coming back to this blog after upgrading to macOS Mojave please se ...

  5. Python版本的数据结构书_《用Python解决数据结构与算法问题》

    源于经典 数据结构作为计算机从业人员的必备基础,Java, c 之类的语言有很多这方面的书籍,Python 相对较少, 其中比较著名的一本 problem-solving-with-algorithm ...

  6. ubuntu升级python_ubuntu升级python版本

    运行发现错误: AttributeError: 'module' object has no attribute 'OrderedDict' google发现是因为python版本老了的原因(pyth ...

  7. linux中更新python_linux下面升级 Python版本并修改yum属性信息

    最近需要在linux下使用python,故需要升级一下python版本,上网查询了一下相关资料,更新了一下linux下面的python环境,记录如下: linux下面升级 Python版本并修改yum ...

  8. 如何确定python对应电脑版本_查看Anaconda版本、Anaconda和python版本对应关系和快速下载...

    官网 查看Anaconda版本 (C:\ProgramData\Anaconda3) C:\Users\Administrator>conda -V conda 4.3.30 Anaconda和 ...

  9. 当前主要使用的python版本_如何获取当前使用的Python版本信息?(代码示例)

    本篇文章主要给大家介绍如何获取当前Python版本,希望对需要的朋友有所帮助! 版本信息: 包含版本号的五个组件的元组:major,minor,micro,releaselevel和serial.除r ...

最新文章

  1. JavaScript 工作原理之十一-渲染引擎及性能优化小技巧
  2. [Modules]PrestaShop插件 模块 – 产品推荐模块 随机展示推荐产品
  3. java域的控制修饰符可分为_Java中的类和方法的修饰符
  4. 前端学习(3239):react生命周期setstate流程
  5. MySQL按时间查找
  6. 对象输出流 ObjectOutputStream java
  7. 3月国内网站流量:腾讯夺第二 360安全中心降至第三
  8. 保存一个 Python 对象,之后使用时直接读取
  9. c++语言将任意进制转化10进制,C++ 基础编程之十进制转换为任意进制及操作符重载...
  10. Objective-C JSON字符串解析
  11. NeoKylin7配置DM8数据库实例
  12. 自签名证书和私有CA签名的证书的区别
  13. 杨建:网站加速--实例分析篇
  14. Python工程师必备哪些技能 学习路线是什么
  15. 怎么在视频画面添加图片的方法
  16. Fire (poj 2152 树形dp)
  17. ArchSummit讲师专访:EMC研究院资深研究员陶隽谈实时数据分析
  18. 那些牛逼互联网公司里技术团队的博客
  19. HAL(Hardware Abstract Layer)硬件抽象层工作原理
  20. Flutter 项目 app迭代更新

热门文章

  1. 产品生命周期专业术语积累
  2. photoshop2021正式版上线,photoshop 2021 mac
  3. mysql全文查询中文_MySQL-中文全文检索
  4. c语言书本答案揭安全,c语言书本练习答案.docx
  5. 微信为什么不支持android4,解决android4.4.4手机不能正常调起微信支付问题
  6. 苹果邮箱怎么登录qq邮箱_gmail邮箱登录官网方法
  7. python参数化建模加工图_基于Python的ABAQUS层压板参数化建模
  8. 【Java】 # 使用java调用MySQL的函数、存储过程
  9. java final成员变量吗_阳光沙滩博客-为什么Java匿名内部内使用局部变量需要加final?而访问成员变量却不用加final呢?...
  10. Three dynamic_sea实例