pySerial部署有问题

时间:2015-01-24 16:15:10

标签: python pyserial

我有一个依赖于MinimalModbuspySerial库的自定义python脚本。我试图将它部署到运行python解释器的路由器。

MinimalModbus只是一个单独的.py文件,部署起来很简单。但是,pySerial库看起来更强大。它看起来像几个python文件一起工作,自动选择适当的后端"。

是否必须安装" pySerial为了使用它?或者是否有某种方法可以仅提取给定操作系统的相关文件/依赖项?

运行pySerial的setup.py(例如复制的文件?)时,我不知道所有内容都已执行。我不知道它是否适用于这种特定类型的部署。我希望只包含特定文件。

任何帮助将不胜感激。

我们使用的是Python 2.6版。

更新

我基本上已经安装了""来自我的开发盒上/ site-packages / serial文件夹的文件,并将它们上传到设备。这让我更进一步;但是,我现在收到以下错误:

enter image description here

serialposix.py的第273行,它正在调用:

self.fd = os.open(self.portstr, os.O_RDWR|os.O_NOCTTY|os.O_NONBLOCK)

为什么它无法找到os.open例程?

更新2

进一步简化问题,我的脚本现在包含以下简单的内容,但它仍然失败并出现同样的错误:

import os
serfd = os.open("/com/0", os.O_RDWR | os.O_NONBLOCK)

Python Standard Modules with Digi-Specific behavior下,他们对os模块发表以下评论:

目前,Digi设备中os模块的使用非常有限。暴露它的主要目的是允许访问串行端口,这些端口在文件系统中显示为节点。串口可用作文件,其路径格式为/ com / 0,其零替换为要控制的串口的从零开始的索引。

此外,他们的两个示例应用程序都使用os.open例程进行串行通信。

我原本希望看到一个错误,如:OSError:[Errno 2]没有这样的文件或目录:' / com / 0',但事实并非如此。 Python甚至无法找到os.open例程。

您是否希望os.py文件定义def open(...)例程?

2 个答案:

答案 0 :(得分:1)

在与此路由器的制造商打开支持案例后,发现该设备不支持os.open功能。但是,该设备确实支持io.open我相信它是相似的。更重要的是,我了解到制造商提供了他们自己的" pyserial"专门设计用于设备操作系统的实现。在内部,看起来他们已经切换出使用io.open等效的调用。

答案 1 :(得分:-1)

看过源文件,我相信它完全是基于python的,当它安装时,它会将文件复制到site-packages文件夹。

说过看起来你需要几个源文件才能使它工作,如果你只是简单地复制它们,你可能需要修改它们的导入以确保它们正常工作。

例如对于linux,您需要serialposix.py文件和serialutil.py

你可能需要的不仅仅是这个,但我只是快速浏览一下。

但是在serialposix.py的顶部有一行:

from serial.serialutil import *

这需要更改为:

from serialutil import *

可能还有其他此类更改。

但最终这似乎使用ctypes来与底层操作系统进行艰苦的工作,所以你应该能够使它工作。

更新: 解释为什么它调用os.open,在大多数平台上串口都被视为几乎像文件一样,返回一个“文件就好”的句柄,pyserial背后的想法就是抽象操作系统级别差异来创建单个易于这些接口,但最终它仍被视为操作系统的句柄文件。

只是为了澄清你能让我们知道你正在使用什么版本的pyserial吗?你引用的行号和我看的不匹配。

我怀疑你遇到困难的主要原因是你正在使用的python部署的zip性质,但是我觉得很难相信OS不包含在其中,你有没有检查过ZIP中的OS python文件或者它是一个已编译的python文件?

更新2: 看着你正在使用的发行版的文档,我建议你阅读以下内容:
Python Standard Modules with Digi-Specific Behavior

这些设备的某些功能受到限制,它还提供了一种方法,您可以通过该方法测试telnet / SSH是否支持设备并在python命令行上尝试它。

另外,虽然它像pyserial模块一样整洁且易于使用,但我建议您也阅读: Digi Serial Port Access

相关问题