如何在Python中不使用外部API读取串口数据?
我需要读取一个从自制设备通过串口发送过来的数据流。问题是,这个程序要在一台我无法安装任何新软件的机器上运行,这意味着我只能使用Python自带的标准库来完成这个任务。这样做可行吗?如果可以的话,我该怎么做呢?
如果这几乎不可能实现,那我就得找人帮我安装pySerial库,但如果能不安装这个库就解决问题,我会非常感激。
如果在Linux和Windows上有区别的话,我是在Windows机器上工作,不过我更希望能有一个跨平台的解决方案。
2 个回答
你说你没有权限安装新的东西。我猜这可能是权限问题,也就是说你无法获得更高的管理权限,导致 pip install 或 conda install 失败。
如果你能以普通用户的身份登录到这台机器(我想你必须有这种权限,才能把你的脚本放到机器上),那么你可以使用虚拟环境来安装你需要的模块。这一切都可以在普通用户账户下完成。
只需在网上搜索“python 虚拟环境”,你就能找到所有需要的信息。
如果你使用的是 Anaconda Python,那就稍微有点不同。搜索“conda 环境”就可以了。
如果你连主机上的命令提示符都无法使用,比如你把文件打包后交给别人去部署,你仍然可以使用虚拟环境。你只需要把虚拟环境和你的脚本一起打包。使用 Anaconda 时,你可以通过 -p 选项让环境创建在项目的同一目录下。我想 pipenv 也有类似的功能。
或者你可以使用 pyinstaller 把所有东西打包,这样就能创建一个包含所有模块的独立运行环境。
在类Unix操作系统中,串口的工作方式就像一个文件,你只需要打开它,然后读取或写入字节。虽然你可以进行一些额外的设置,比如调整波特率等,但基本上就是这么简单。
在Windows系统中,打开串口的方式也像文件一样,但你需要用一些特定的方法来访问,这些方法和Python处理普通文件的方式稍有不同。不幸的是,仅仅使用Python的原生库来访问Windows串口是比较困难的。
pyserial
库提供了一种统一的、跨平台的串口访问方式。它依赖于ctypes
,这个库从Python 2.5开始就已经包含在标准库中了,所以你可以把pyserial
和你的应用程序一起使用。