Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当另一个程序正在使用串行端口时,如何将命令连接并发送到该端口?_Python_Linux_Gps_Serial Port_At Command - Fatal编程技术网

Python 当另一个程序正在使用串行端口时,如何将命令连接并发送到该端口?

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

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

我的系统运行的是LinuxMint17.1,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开启时尝试使用它时,我无法连接到串行设备。最奇怪的是,如果我在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)