打开/关闭串行端口与拒绝Pyserial的权限

问题描述

我希望有人可以阐明封闭/开放串行端口的区别与获得串行端口许可之间的区别吗?特别是pyserial。目前,我觉得他们是同一个人。

我将尝试使用pyserial来说明我的问题。 假设我正在尝试使用uart与微控制器进行通讯,并且在Windows pc上打开了一个串行端口以与之通讯。使用pyserial运行代码,一切都按预期运行。

但是可以说我正在使用realterm来使用串行端口读取线路上的数据。

现在,如果我再次运行python代码,我将从pyserial收到一个权限错误,指示它不可用。 表示串行端口当前处于打开状态。

我之所以要区分两者,是因为在我的pyserial代码中,我正在检测串行端口是否打开。如果串行端口已打开,请使用串行端口。如果没有,请不要使用它。

以下是我当前正在使用的一些代码,用于检查并打开一个串行端口(使用python / pyserial):

    def open_port(self):
# Checking if the port is already open or not. If it is not open,lets open it.
        if(self.isopen() == False):  # NOTE This check will not goes as I expect if another program has opened it. Shouldn't this check determine if the resource is available to be used?
            try:
                self.open()
            except serial.SerialException as e:
                print(e) # Printing the raw message.
                error_message = "The port you are trying to open ("+str(self.port)+")"+" is currently open." # My own message. This might be wrong based on this discussion.
                print(error_message)
                sys.exit()
            else:
                ...   # Do other things
                

通常,此代码可以正常工作,没有任何问题。

但是,如果另一个程序(实时)正在使用串行端口,或者如果我正在使用另一个具有相同串行端口的pyserial实例,则这是相同代码输出

Could not open port 'COM4': PermissionError(13,'Access is denied.',None,5)
The port you are trying to open (COM4) is currently open. 

如您所见,它无法使用串行端口(这很有意义,因为我使用的是realterm。) 我感到困惑的是,if(self.isopen() == False):是否不应该检查串行端口是否可用?

我认为打开或关闭串行端口等效于说是否正在使用资源。如果打开了串行端口,则该端口正在被某个应用程序使用,而其他应用程序则不应触摸它。

但是原始错误表明串行端口存在权限错误。 打开和关闭端口与端口权限之间有区别吗?我以为它们基本相同?

如果它们不同,请解释一下它们之间的区别吗?另外,我如何在pyserial中确定是否可以使用串行资源?

感谢您的帮助,如果还有其他问题,请告诉我!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)