我使用的是 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/