使用Python,我需要强制关闭使用其他程序打开的COM端口。我无法关闭COM端口,因为它已经在其他位置打开,因此无法与它发起会话。
import visa
rm = visa.ResourceManager()
# list all the COM ports connected to PC
print(rm.list_resources())
# open a device session on one COM port
dev = rm.open_resource('COM12')
# this can't be done if the 'COM12' is already opened somewhere else
# I need to close 'COM12' like this
# but can't access it because its already opened
dev.close()
如果在其他程序中打开了像“ COM12”之类的会话,是否可以强制关闭该会话?当其他软件(LabVIEW)遇到错误时,它崩溃并经常使COM端口保持打开状态,这又使我无法在不手动关闭物理设备的情况下访问它们。最好将它们关闭以使它们可以再次正确打开。
答案 0 :(得分:2)
我非常确定,如果LabVIEW崩溃,操作系统将代表它释放所有硬件资源。
但是请记住,LabVIEW是运行子程序的运行时环境。因此,如果子程序中止,则LabVIEW进程本身可能仍在运行。编写一个小的LabVIEW程序很容易,因为它可以在LabVIEW环境中在COM12上调用VISA Close。您也可以退出LabVIEW过程。
最后,我偶尔会看到串行设备驱动程序(特别是对于非标准串行端口,例如使用USB或以太网的那些串行端口),如果您的程序不能很好地完成所有工作(例如正常调用),则会遇到问题关。在这种情况下,有时您必须重新启动才能使设备驱动程序进入正确的状态。
答案 1 :(得分:1)
虽然我没有确切的答案,但我可以肯定的是:不。就像这样,没有很好的方法来实现这一目标。
硬件资源由操作系统处理。而且,如果一个进程打开了一个资源却没有释放它,则您不能未经同意就去偷它。那会使其他过程崩溃。任务是阻止哪些操作系统。
您可以使用操作系统的API来“杀死”另一个进程。但是,您首先必须将其标识为对给定资源持有控制权的人-这将是另一个问题的主题。