【问题标题】:Python PySerial.How to know if a port is already open?Python PySerial.How 知道一个端口是否已经打开?
【发布时间】:2023-03-30 14:31:01
【问题描述】:

我正在尝试使用 python 和 PySerial 在 Linux PC 中编写一个使用串行端口的应用程序。但是在这台电脑上还有其他应用程序使用串口。 在尝试使用端口之前,如何知道端口是否已被其他 App 打开?

谢谢

【问题讨论】:

    标签: pyserial


    【解决方案1】:

    PySerial 网站上的文档似乎很糟糕,这对我有用:

    ser = serial.Serial(DEVICE,BAUD,timeout=1)
    if(ser.isOpen() == False):
        ser.open()
    

    有点人为的例子,但你明白了。 我知道这个问题是很久以前提出的,但我今天也有同样的问题,并且觉得其他找到此页面的人会很高兴找到答案。

    【讨论】:

    • 刚刚意识到这个问题与这个问题略有不同,但我希望这个答案仍然会有所帮助!
    • 我刚刚在 2017 年 8 月发现了这个 - 在 Google 的列表中名列前茅。感谢您以您的方式发布此内容。它准确地回答了我的问题。就我而言,这意味着程序已经在运行。我在计算机中使用 ssh,有时我会从控制台运行数据记录程序 ssx。 Python 现在可以使用它来检测它而无需中止,并使用os.system("killall ssx") 自行停止另一个。这仅在我进行更改时发生,但这足以让我搜索。你在这里。 TNX。
    【解决方案2】:

    查看Serial.serial的返回输出,返回一个可以被捕获的无效异常

    http://pyserial.sourceforge.net/pyserial_api.html http://pyserial.sourceforge.net/pyserial_api.html#serial.SerialException

    除此之外,如果在您的程序尝试访问它时端口实际上已关闭,则抛出的错误不是致命的,并且很清楚它失败的原因。

    【讨论】:

      【解决方案3】:

      这是我在尝试防止我的应用程序因停止并重新启动而失败时提供的帮助。

      import serial
      
      try:
        ser = serial.Serial( # set parameters, in fact use your own :-)
          port="COM4",
          baudrate=9600,
          bytesize=serial.SEVENBITS,
          parity=serial.PARITY_EVEN,
          stopbits=serial.STOPBITS_ONE
        )
        ser.isOpen() # try to open port, if possible print message and proceed with 'while True:'
        print ("port is opened!")
      
      except IOError: # if port is already opened, close it and open it again and print message
        ser.close()
        ser.open()
        print ("port was already open, was closed and opened again!")
      
      while True: # do something...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        相关资源
        最近更新 更多