python - 当另一个程序正在使用串行端口时,我如何连接并向串行端口发送命令?

标签 python linux gps serial-port at-command

我使用的是 telit he910g 卡。它使用 miniPCI 插槽直接连接到我的 PC。 我将其用于 3G 互联网连接和 A-GPS/GPS 服务。

我的系统运行的是 linux mint 17.1,3G 连接是使用网络管理器 APP 处理的,效果很好。 3G 连接是使用一个模块启动和处理的,该模块是我正在编写的程序的一部分。 我用来连接串口的代码是这样的:

def _connect_to_device(self):
    """ Connect to a serial port """

    try:
        self._device = serial.Serial(self._filename, baudrate=self._baud_rate)
    except StandardError, e:
        raise StandardError("Couldn't connect to GPS device. Error: %s" % str(e))

当我单独使用 python 程序时,效果很好。但是当我在 3G 开启时尝试使用它时,我无法连接到串行设备。奇怪的是,如果我在打开 3G 时尝试使用“minicom”之类的程序连接到它,它确实有效。

所以我的问题是:我怎样才能同时运行和工作?因为现在它们是相互排斥的。

感谢所有帮助过的人。 :)

最佳答案

很高兴您找到了解决问题的方法。只是为了完整性:

一般情况下,串口是可以被多个进程打开的。 如果其中之一对打开的文件执行 ioctl(,TIOCEXCL),则进一步打开将返回 EBUSY,直到每个人都关闭设备。只有 root 可以通过此操作并始终打开设备。

如果 root 打开设备并执行 ioctl(,TIOCNXCL),那么其他进程也可以打开设备。

在 python 中,TIOCNXCL 未在任何地方定义,但您可以执行 ioctl(例如在标准输入上):

import fcntl
TIOCEXCL = 0x540c # from /usr/lib64/perl5/asm-generic/ioctls.ph
TIOCNXCL = 0x540d
print fcntl.ioctl(0, TIOCNXCL)

关于python - 当另一个程序正在使用串行端口时,我如何连接并向串行端口发送命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30826646/

相关文章:

python - 从图像生成 bool 矩阵

python编码utf 'Miały'不等于 'Miały'

c++ - 解析来自串口的完整消息

android - 使用 Fused location Geofences 时是否需要请求位置更新?

LINQ POI 邻近度

python - 如何对 Python 程序输出的所有文本进行编码?

python - 如何从每一行中删除最后一位数字

linux - 无法从腻子重新启动Oracle Linux session

linux - 如何在打包、签名、混淆机制方面比较两个 tar 文件?

c - 查找 POSIX 信号量上阻塞的任务数