Python 当另一个程序正在使用串行端口时,如何将命令连接并发送到该端口?
我使用的是telit he910g卡。它使用miniPCI插槽直接连接到我的电脑。 我将其用于3G互联网连接和A-GPS/GPS服务 我的系统运行的是LinuxMint17.1,3G连接使用网络管理器应用程序处理,效果非常好。3G连接是使用我正在编写的程序中的模块启动和处理的。 我用于连接串行端口的代码如下:Python 当另一个程序正在使用串行端口时,如何将命令连接并发送到该端口?,python,linux,gps,serial-port,at-command,Python,Linux,Gps,Serial Port,At Command,我使用的是telit he910g卡。它使用miniPCI插槽直接连接到我的电脑。 我将其用于3G互联网连接和A-GPS/GPS服务 我的系统运行的是LinuxMint17.1,3G连接使用网络管理器应用程序处理,效果非常好。3G连接是使用我正在编写的程序中的模块启动和处理的。 我用于连接串行端口的代码如下: def _connect_to_device(self): """ Connect to a serial port """ try: self._dev
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”之类的程序连接到它,它确实可以工作
所以我的问题是:我如何使两者同时运行和工作?从现在起,它们是相互排斥的
感谢所有帮助我的人。:) 好的,就这样解决了
问题是telit模块有两个端口/dev/ttyACM0(高速)和/dev/ttyACM3(低速)。
我试图连接到高速网络,但显然3G使用了高速网络,这引起了争议。
因此,在我的脚本中使用低速端口解决了这个问题。好的,就这样解决了
问题是telit模块有两个端口/dev/ttyACM0(高速)和/dev/ttyACM3(低速)。
我试图连接到高速网络,但显然3G使用了高速网络,这引起了争议。
因此,在我的脚本中使用低速端口解决了这个问题。很高兴您找到了解决问题的方法。为了完整起见: 通常,串行端口可以由多个进程打开。 如果其中一个对打开的文件执行ioctl(,TIOCEXCL),则进一步打开将返回EBUSY,直到所有人都关闭设备。只有root用户才能通过此操作并始终打开设备 如果root用户打开设备并执行ioctl(,TIOCNXCL),那么其他进程也可以打开设备 在python中,TIOCNXCL没有在任何地方定义,但是您可以通过以下方式执行ioctl(例如在stdin上):
很高兴你找到了解决问题的办法。为了完整起见: 通常,串行端口可以由多个进程打开。 如果其中一个对打开的文件执行ioctl(,TIOCEXCL),则进一步打开将返回EBUSY,直到所有人都关闭设备。只有root用户才能通过此操作并始终打开设备 如果root用户打开设备并执行ioctl(,TIOCNXCL),那么其他进程也可以打开设备 在python中,TIOCNXCL没有在任何地方定义,但是您可以通过以下方式执行ioctl(例如在stdin上):
错误代码是EBUSY吗?如果您只是用
@meuh Yes打开设备,错误是设备正忙。使用@meuh Yes打开设备,错误是设备正忙。使用@meuh Yes打开设备,错误是设备正忙。使用import fcntl
TIOCEXCL = 0x540c # from /usr/lib64/perl5/asm-generic/ioctls.ph
TIOCNXCL = 0x540d
print fcntl.ioctl(0, TIOCNXCL)