我的程序利用Qt的QFileSystemWatcher
函数监视网络目录(不在本地计算机本身上)进行更改,然后在找到更改时运行脚本。此功能大部分都按要求执行。该程序旨在全天候运行,这引发了一些使用此特定功能的问题。
导致问题的错误如下:
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'
错误建立错误处理?任何意见都将非常感谢!
答案 0 :(得分:1)
根据上述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!