一、pyserial_1.0(16years ago )

我看最新的pyserial代码发现看不懂~Σ( ° △ °|||)︴,尝试用跑跑看一看效果,debug跟一跟流程的方式来熟悉理解,发现·····特么~转太多弯啦~根本就hold不过来啊!脑容量跟基本功都不够啊!于是想着怎么从侧面来攻破这个堡垒............

然后在网上找学习经验,突然想到这个包当初肯定是有个起点的,起点是容易理解且不复杂的,解决一个单一问题的,就像我自己写框架一样(即先快速做出功能、原型,然后再反复迭代改进)。

然后就在github官网找到了它的各个版本:

一、pyserial_1.0(16years ago )_第1张图片
各个发行版本

其中最底下三个貌似是有点问题的,比如release0_1和2是并口的文件,last-svn-state是无法运行的,因此从release1_0下手,


一、pyserial_1.0(16years ago )_第2张图片
文件结构

_init_.py负责实现平台兼容,其实就是在导入这个包的时候根据平台来选择不同的处理类,我的是windows系统因此跑到serialwin32.py文件下去跟踪源码,第一行代码就是

import    win32file   #The base COM port and file IO functions.

win32file是个啥?包文件夹里面并没有这个文件,那么是在在哪导入的呢?

在这之前还得知道pyd是啥文件:(源自:http://proupy.com/news/33)

DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。打不开,不过可以使用反汇编;

PYD是一种PYTHON动态模块。实质上还是dll文件,只是改了后缀为PYD,pyd:

首先是我们最常见的.py文件。以.py扩展名的文件是源代码文件,由python.exe解释,可在控制台下运行。当然也可以用文本编辑器进

行修改。

接下来介绍的是.pyc文件。以.pyc为扩展名的是python的编译文件。.pyc文件是不能够用文本编辑器之类的进行编辑的,但是同样它的

优点在于.pyc文件的执行速度快于.py文件。至于为什么要有.pyc文件,这个需求太明显了,因为py文件是可以直接看到源码的,如果

你是开发商业软件的话,不可能把源码也泄漏出去吧?所以就需要编译为pyc后,再发布出去。

再接下来介绍的是.pyw文件。很多使用过.pyc文件的同学都知道,.pyc文件执行的时候桌面会出现黑糊糊的窗口,有的时候这是十分难

看的。于是.pyw文件就应运而生了。.pyw文件与.pyc文件本质上没有什么区别,只是.pyw执行的时候不会出现黑窗口。.pyw 格式主要

是被设计来运行开发完成的纯图形界面程序的。 纯图形界面程序的用户不需要看到控制台窗口。值得一提的是,开发纯图形界面程序

的时候,你可以暂时把 .pyw 改成 .py , 以便运行时能调出控制台窗口,看到所有错误信息,方便进行修改。

接下来介绍的是.pyo文件。pyo是优化编译后的程序。 python -O 源文件即可将源程序编译为pyo文件。同样.pyo文件也是不能用文

本编辑器编辑的。

最后介绍的是.pyd文件。.pyd文件并不是使用python编写而成,.pyd文件一般是其他语言编写的python扩展模块。(之前又在网上看到

过有关解释,.pyd文件是用D语言按照一定的格式编写,并处理成二进制文件。那么什么是D语言呢??它是c/c++的综合进化版,不仅

具有二者的全部优点,而且整体性能更佳,但是其抽象程度高。)

扩展模块,一般用C或C++编写,其实可以说是一种更优秀的D语言编写的。

总的来说,pywin32就是在python跟windows系统API之间建立一个桥梁,中间件,可以在python下直接windows编程。而win32file是其中的一个组成部分,因此我们追根究底追到这基本上就可以打住了(知道提供哪些API就行了),因为再往下的话就是windows系统编程了。

假如硬是有人要缺根径,一定要追的话,那估计再往下得到系统驱动层的api,再往下到bsp层的api,再往下到汇编测api,因此其实最底下的思路还不是就这样---封装(例如ATC上层无论你整的多么复杂多么多的api,我再最底层就是一个单片机通过串口交互些数据,因此只要把单片机的功能划分好定义好数据结构及api,以后的高楼大厦都是基于此的,因此懂就好,要跳出来,不求甚解,抓住轮廓,当然前提是我从底层的硬件设计、驱动程序到上位的程序都写过才会有这个理解,假如那些一直写上位机代码的人估计会对底层的运行机制心虚吧~)

http://blog.csdn.net/huiguixian/article/details/6968931

看到网上说的Pywin32可以像VC一样的形式来使用PYTHON开发win32应用,我就下载了个,但是不会使用,有基本的入门教程吗,或者谁给说说,比如说画界面什么的!

Python没有自带访问windows系统API的库的,需要下载第三方库。库的名称叫pywin32,可以从网上直接下载,下载链接:http://sourceforge.net/projects/pywin32/files%2Fpywin32/(下载适合的Python版本)

使用中如果出现ImportError: No module named win32api 或者出现 ImportError: No module named win32con,说明你的库没有安装好。

介绍这个库里面最重要的两个模块:win32api和win32con(也就是说在windows下安装win32all.exe之后会生成一个库,这个库里面就有win32api和win32con以及win32file,分别管不同的部分)

win32api顾名思义,就是用python对win32的本地api进行了封装;win32con个人理解为win32constant,即win32的常量定义。

这里是网上讨论API的一些言论:

首先,API的意思是Application Program Interface,应用程序接口.

实际上,只要是程序,都可以对外提供API,比如你写一个网站.然后对外提供API,任何人都可以通过你提供的API获取到对应的信息.例如你网站中的数据.

win32 API是windows系统提供的API,

.NET 也可以提供API

虽然提供的作用可能会有重合,但是不影响说,其实这是两个不同程序提供的API.

不能因为说windows提供了API,那么.NET就不能提供API了.

而且.NET的API虽然很多是对WINDOWS的封装,但是这样可以避免一个人要学习.NET.还必须要去学习WINDOWS的API.

在读源码的时候可以看到使用了一个:win32file.OVERLAPPED()

windows编程的API

Overlapped I/O是win32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这项技术使你的程序在I/O进行中仍然能够继续处理事物。Overlapped I/O的基本形式是以ReadFile和WriteFile函数完成的。

WaitCommEvent(handle, overlapped)

Waits for an event to occur for a specified communications device. The set of events that are monitored by this function is contained in the event mask associated with the device handle.


Return Value

The result is a tuple of (rc, mask_val), where rc is zero for success, or the result of calling GetLastError() otherwise.  The mask_val is the

new mask value once the function has returned, but if an Overlapped object is passed, this value will generally be meaningless.  See the

comments for more details.


从pycharm下下载pyserial后其结构如图所示:

一、pyserial_1.0(16years ago )_第3张图片

结构图

我查看serial文件,发现里面有

一、pyserial_1.0(16years ago )_第4张图片

稍微一查即可指导核心是serialwin32(win环境下)下的serial类,其继承自serialutil.py下的SerialBase类,同时还使用了win32.py文件,因此问题分解为win32是干什么的?SerialBase负责什么部分?serialutil要干哪些活?serial是如何将这些串起来的?

针对第一个问题:win32是干什么的?

win32下有一些DLL文件,那么DLL是啥?ctypes是啥?

然而动态链接库又是啥?跟静态链接库有啥区别?

ctypes是python的一个外部函数库,提供和C语言兼容的数据类型,可以直接调用动态链接库中的导出函数。

聊聊Python ctypes 模块

浅谈python中使用C/C++:ctypes

你可能感兴趣的:(一、pyserial_1.0(16years ago ))