python - 当另一个程序正在使用它时,如何连接命令并将命令发送到串口?

python - 当另一个程序正在使用它时,如何连接命令并将命令发送到串口?,第1张

我正在使用telit he910g卡。它使用miniPCI插槽直接连接到我的电脑。 我用它来进行3G互联网连接和A-GPS / GPS服务。

我的系统运行linux mint 17.1,使用网络管理器APP处理3G连接,效果很好。使用作为我正在编写的程序的一部分的模块启动和处理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开启时使用它时,我无法连接到串行设备。奇怪的是,如果我尝试使用像“minicom”这样的程序连接到它,而3G打开则可以正常工作。

所以我的问题是:如何让两者一起运行?从现在起它们是相互排斥的。

感谢所有帮助的人。 :)

最佳答案:

2 个答案:

答案 0 :(得分:0)

好的,所以它已经解决了。

问题是telit模块有2个端口/ dev / ttyACM0(高速)和/ dev / ttyACM3(低速)。 我试图连接到高速的,但显然3G使用那个,它会导致争用。 因此,在我的脚本中使用低速端口解决了这个问题。

答案 1 :(得分:0)

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

通常,串行端口可以通过多个进程打开。 如果其中一个在打开的文件上执行ioctl(,TIOCEXCL),则进一步打开将返回EBUSY,直到每个人关闭设备。只有root才能通过此操作并始终打开设备。

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

在python中,TIOCNXCL并未在任何地方定义,但您可以使用以下命令执行ioctl(例如,在stdin上):

import fcntl
TIOCEXCL = 0x540c # from /usr/lib64/perl5/asm-generic/ioctls.ph
TIOCNXCL = 0x540d
print fcntl.ioctl(0, TIOCNXCL)
本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复