gpt4 book ai didi

python - 使用 PySide/PyQt 处理 QFileSystemWatcher 错误 - Python 3.x

转载 作者:太空宇宙 更新时间:2023-11-03 17:44:15 32 4
gpt4 key购买 nike

我的程序利用 Qt 的 QFileSystemWatcher 函数来监视网络目录(而不是本地计算机本身)的更改,然后在发现更改时运行脚本。此功能在大多数情况下按要求执行。该程序设计为 24/7 运行,这在使用此特定功能时引发了一些问题。

导致问题的错误如下:

QFileSystemWatcher: FindNextChangeNotification failed!! (The specified network name is no longer available.)

我想实现的功能如下:

  1. 针对 QFileSystemWatcher 构建有关网络可用性的错误处理
  2. 如果网络不可用并引发错误,请转到 Script()
  3. 运行Script()来处理不可用的网络

鉴于QFileSystemWatcher函数是在程序初始化时建立的,我不确定如何进行错误处理。这是我当前代码的基本轮廓:

class Main(QMain, Ui_Main):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
self.setupUi(self)

self.DirectoryWatcher = QtCore.QFileSystemWatcher([r'U:\NetworkAddress\Directory'])
self.DirectoryWatcher.directoryChanged.connect(self.GoToThisDirectory)

def GoToThisDirectory(self):
print("foo")

有没有办法明确为 'FindNextChangeNotification' 错误建立错误处理?任何意见将不胜感激!

最佳答案

根据上面 ekhumoro 的评论,我已经成功使用 qInstallMsgHandler 和 sys.excepthook 函数解决了这个问题。

import sys
import os
from PySide.QtCore import qInstallMsgHandler

def myCustomHandler(ErrorType, ErrorContext):
print("Qt error found.")
print("Error Type: " + str(ErrorType))
print("Error Context: " + str(ErrorContext))

#Error logging code
#Error emailing code

os.execv(sys.executable, [sys.executable] + sys.argv)

qInstallMsgHandler(myCustomHandler)

def ErrorHandling(ErrorType, ErrorValue, TraceBack):
print("System error found.")
print("Error Type: " + str(ErrorType))
print("Error Value: " + str(ErrorValue))
print("Traceback: " + str(TraceBack))

#Error logging code
#Error emailing code

os.execv(sys.executable, [sys.executable] + sys.argv)

sys.excepthook = ErrorHandling

#Rest of the script

我的解决方案分别解决 Qt 和 Python/系统相关的错误,但以相同的方式处理它们。错误会记录在 .log 文件中,通过电子邮件发送给系统管理员,然后软件会重新启动。感谢您引导我走向正确的方向 ekhumoro!

关于python - 使用 PySide/PyQt 处理 QFileSystemWatcher 错误 - Python 3.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30041542/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com