IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Action à l'arrivée d'un fichier dans un dossier ?


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 30
    Par défaut Action à l'arrivée d'un fichier dans un dossier ?
    Hello,

    Je voudrai imprimer des fichiers lorsque ceux-ci arrivent dans un répertoire.

    Je n'ai aucune idée de la manière de faire pour vérifier qu'un fichier arrive dans le dossier.

    De plus il faudrait que ça soit quasiment instantané.

    Le problème vient du fait que les fichiers générés sont sur un serveur linux sur lequel il est impossible de faire fonctionner l'imprimante. Les fichiers seraient alors uploader sur un serveur Windows pour impression.

    Merci de m'aider.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 76
    Par défaut
    Salut !

    Pour vérifier si des fichiers sont glissés dans un répertoire il suffit de surveiller ce dossier par le biais de ton programme.

    Tu construis une sorte de boucle ou plutôt d'évènement périodique qui va lire le contenu du dossier que tu souhaites surveiller. A toi de voir la fréquence de rafraichissement de cette fonction, il faut juste qu'elle ne bloque pas tout le reste ^^ (gaffe donc si tu fais un tout bête while True )
    Tu compares ensuite les fichiers présents avec une liste de fichiers de référence pour savoir s'il y a de nouveaux fichiers ajoutés. Si c'est le cas, tu lances ton impression et tu mets à jour ta liste de référence.

    Le plus élégant serait sans doute de récupérer les évènements générés par le système d'exploitation, ce qui permettrait aussi de détecter l'arrivée de nouveaux fichiers dans un dossier... le seul soucis c'est que je sais pas faire ça

  3. #3
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut arrivé fichier avec timer wx
    Voila un exemple avec un timer wx :
    le répertoire à tester est self.rep
    Ce prog affiche une petite fenêtre avec le nombre de fichiers, ils sont dispo dans une liste ''fichiers''




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    #!/usr/bin/env python
    # -*- coding: iso-8859-15 -*-
    # generated by wxGlade 0.6.1 on Sat May 31 21:05:51 2008
     
    import wx
    import time
    import glob
     
    # begin wxGlade: extracode
    # end wxGlade
     
     
     
    class MyFrame(wx.Frame):
        def __init__(self, *args, **kwds):
            # begin wxGlade: MyFrame.__init__
            kwds["style"] = wx.DEFAULT_FRAME_STYLE
            wx.Frame.__init__(self, *args, **kwds)
            self.tAff = wx.StaticText(self, -1, "Lancement         ")
            self.timer=wx.Timer(self, 1)
     
            self.tailleText=10
            self.rep=r"c:\test"
     
     
            self.__set_properties()
            self.__do_layout()
            # end wxGlade
     
        def __set_properties(self):
            # begin wxGlade: MyFrame.__set_properties
            self.SetTitle("verDoss")
            self.tAff.SetBackgroundColour(wx.Colour(50, 153, 204))
            self.tAff.SetFont(wx.Font(self.tailleText, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
            self.Bind(wx.EVT_TIMER, self.onTimer, self.timer)
            # end wxGlade
     
        def __do_layout(self):
            # begin wxGlade: MyFrame.__do_layout
            sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
            sizer_1.Add(self.tAff, 0, 0, 0)
            self.SetSizer(sizer_1)
            sizer_1.Fit(self)
            self.Layout()
            # end wxGlade
     
        def onTimer(self, event): # Timer = Vérification à intervals régulier
            fichiers=glob.glob(self.rep+r"\*.doc") # Mettre le type de fichier
            nbFich=len(fichiers)
            label=" Nb fichier="+str(nbFich)+"      "
            self.tAff.SetLabel(label)
            for fich in fichiers :
                pass
                # imprimer le fich
                # Effacer le fich
     
     
     
    # end of class MyFrame
     
     
    if __name__ == "__main__":
        app = wx.PySimpleApp(0)
        wx.InitAllImageHandlers()
        frame_1 = MyFrame(None, -1, "")
        app.SetTopWindow(frame_1)
        frame_1.Show()
        frame_1.timer.Start(500) #temps maj en millisecondes Timer
        app.MainLoop()

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Voici une méthode exploitant les événements générés par Windows. Il faut bien sûr installer la librairie PyWin32.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    from win32file import *
     
    FILE_LIST_DIRECTORY = 1
    FILE_NOTIFY_CHANGE_FILE_NAME = 1
     
    FILE_ACTION_ADDED = 1
    FILE_ACTION_REMOVED = 2
    FILE_ACTION_MODIFIED = 3
    FILE_ACTION_RENAMED_OLD_NAME = 4
    FILE_ACTION_RENAMED_NEW_NAME = 5
     
    # open directory
    hDir = CreateFile("c:\\temp", FILE_LIST_DIRECTORY,
        FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
        None, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, None)
     
    print "Waiting for file changes"
    while 1:
        info = ReadDirectoryChangesW(hDir, 1024, False, FILE_NOTIFY_CHANGE_FILE_NAME)
        for action, name in info:
            if action == FILE_ACTION_ADDED:
                print "File Added:", name

  5. #5
    Membre chevronné
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Par défaut
    Salut,

    Si ton script tourne sous linux, tu peux aussi utiliser python inotify qui est fait pour ça (c'est l'équivalent de la commande système "inotifywatch", mais en python).

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/06/2015, 21h25
  2. Réponses: 0
    Dernier message: 06/12/2011, 04h30
  3. Réponses: 26
    Dernier message: 26/03/2010, 15h24
  4. Réponses: 7
    Dernier message: 05/01/2006, 01h06
  5. Pb de comptage de fichiers dans un dossier
    Par oz80 dans le forum Access
    Réponses: 2
    Dernier message: 15/11/2005, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo