My program utilises Qt's QFileSystemWatcher
function to monitor a network directory (not on the local machine itself) for changes, and then run a script when a change is found. This function performs as required for the most part. The program is designed to run 24/7, which has raised some issues using this particular function.
The error which is causing issues is as follows:
QFileSystemWatcher: FindNextChangeNotification failed!! (The specified network name is no longer available.)
The functionality I'd like to implement is as follows:
QFileSystemWatcher
Script()
Script()
for handling the unavailable networkGiven that the QFileSystemWatcher
function is established in the initialisation of the program, I'm not sure how to go about error handling. Here's the basic outline of my current code:
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")
Is there a way to explicitly establish error handling for the 'FindNextChangeNotification'
error? Any input would be greatly appreciated!
As per ekhumoro's comments above, I've managed to solve this question using both the qInstallMsgHandler and sys.excepthook functions.
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
My solution addresses Qt and Python/system-related errors separately, but handles them in the same way. The error is logged in a .log file, emailed to the system administrator and the software is restarted. Thanks for guiding me in the right direction ekhumoro!