QFileSystemWatcher 错误处理 PySide/PyQt - Python 3.x
QFileSystemWatcher error handling with PySide/PyQt - Python 3.x
我的程序利用 Qt 的 QFileSystemWatcher
功能来监视网络目录(不在本地计算机本身)的更改,然后在发现更改时 运行 脚本。此功能在大多数情况下按要求执行。该程序设计为 运行 24/7,这在使用此特定功能时引发了一些问题。
导致问题的错误如下:
QFileSystemWatcher: FindNextChangeNotification failed!! (The specified network name is no longer available.)
我想实现的功能如下:
- 为
QFileSystemWatcher
构建围绕网络可用性的错误处理
- 如果网络不可用并引发错误,请转至
Script()
- 运行
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/system-related 错误,但处理方式相同。错误记录在 .log 文件中,通过电子邮件发送给系统管理员,然后重新启动软件。感谢 ekhumoro 指导我正确的方向!
我的程序利用 Qt 的 QFileSystemWatcher
功能来监视网络目录(不在本地计算机本身)的更改,然后在发现更改时 运行 脚本。此功能在大多数情况下按要求执行。该程序设计为 运行 24/7,这在使用此特定功能时引发了一些问题。
导致问题的错误如下:
QFileSystemWatcher: FindNextChangeNotification failed!! (The specified network name is no longer available.)
我想实现的功能如下:
- 为
QFileSystemWatcher
构建围绕网络可用性的错误处理
- 如果网络不可用并引发错误,请转至
Script()
- 运行
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/system-related 错误,但处理方式相同。错误记录在 .log 文件中,通过电子邮件发送给系统管理员,然后重新启动软件。感谢 ekhumoro 指导我正确的方向!