ディレクトリを監視し、ファイルがユーザーによって追加されたときに警告するプログラムを作成しました。ファイルは user-name.files として特定の形式を持ち、正常に動作しますが、新しいファイルが追加されたという警告を受け取って [OK] を押すと、プログラムは終了しますが、実行し続けたいです。
私が書いた以下のコードは、そのアプリケーション内の別の PYQT アプリケーションの子プロセスとして実行されます。そのため、main() を実行するのではなく、SendMyFiles オブジェクトをインスタンス化するだけです。
from PyQt4 import QtGui,QtCore
from PyQt4.QtCore import pyqtSlot
import sys
import os
class SendMyfiles(QtGui.QMainWindow):
def __init__(self):
super(SendMyfiles, self).__init__()
self._lookInPath = "/Users/krystosan"
self.filesList = os.listdir(self._lookInPath)
print self.filesList
self.watchMyfilesBin()
def watchMyfilesBin(self):
self.fileSysWatcher = QtCore.QFileSystemWatcher()
self.fileSysWatcher.addPath(self._lookInPath)
QtCore.QObject.connect(self.fileSysWatcher,QtCore.SIGNAL("directoryChanged(QString)"), self,
QtCore.SLOT("slotDirChanged(QString)"))
# get list of files as files
self.newFilesList = os.listdir(self._lookInPath)
def _connections(self):
pass
def recievedfilesFromUser(self):
newUsrFile = list(set(os.listdir(self._lookInPath))^set(self.filesList))[0]
userRecvdFrom = newUsrFile.split(".")[0]
self.filesList.append(newUsrFile)
return userRecvdFrom
@pyqtSlot("QString")
def slotDirChanged(self, userfiles):
userName = self.recievedfilesFromUser()
retVal = QtGui.QMessageBox.about(self, "Hello %s" % os.getenv('USER'), "Recieved files from %s." % userName)
def main():
app = QtGui.QApplication(sys.argv)
fileSysWatcher = QtCore.QFileSystemWatcher()
window = SendMyfiles()
app.exec_()
if __name__ == '__main__':
main()