Python PySerial.How 知道一个端口是不是已经打开?

Posted

技术标签:

【中文标题】Python PySerial.How 知道一个端口是不是已经打开?【英文标题】:Python PySerial.How to know if a port is already open?Python PySerial.How 知道一个端口是否已经打开? 【发布时间】:2011-05-30 16:34:33 【问题描述】:

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

谢谢

【问题讨论】:

【参考方案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...

【讨论】:

以上是关于Python PySerial.How 知道一个端口是不是已经打开?的主要内容,如果未能解决你的问题,请参考以下文章

3分钟看懂Python后端必须知道的Django的信号机制!

Python RPyC如何实现客户端与服务端通信

如何面试Python后端工程师

我如何从客户端(html)拍照并将其保存到服务器端(Python)

Python后端技术栈

运行一个 Google App Engine 实例,前端在 nodejs 中,后端服务器在 python 中