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 :

Script de login Python sur AD


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 9
    Points
    9
    Par défaut Script de login Python sur AD
    Bonjour à tous,

    J'ai quelque soucis avec Python sur mon réseau AD.
    Je dispose d'un Windows Server 2003 sur lequel se situe mon script de démarrage à exécuter pour les utilisateurs.

    1- Le script fonctionne sans problème sur le serveur, mais il n'arrive pas à ouvrir le fichier proverbes.csv au démarrage.
    Pourriez-vous m'indiquer comment résoudre ce petit problème.

    2- Je souhaiterais mettre toutes mes fonctions dans un fichier py à part, mais l'exécution fonctionne uniquement sur le serveur (il ne trouve pas la ressource à importer)

    Merci d'avance.


    Voici le script de démarrage :
    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
    71
    72
    73
    74
    75
    76
    77
    78
     
    # -*- coding:Latin-1 -*-
    from os import system
    ##sys.path.append("\\server2003\NETLOGON")
    from init_modules import *
     
    from time import strftime
    from string import atoi
    import os
    import random
    import sys
     
    def afficheMsgBienvenue():
        # Recuperer l'heure système
        heure=atoi(strftime('%H'))
     
        if (heure<6 and heure >=0):
            return "Bonne nuit"
     
        if (heure>6 and heure<12):
            return "Bonne matinée"
     
        if (heure>=12 and heure<18):
            return "Bonne après-midi"
     
        if (heure>=18):
            return "Bonne soirée"
     
     
    def afficheNomUser():
        return os.getenv('USERNAME')
     
    def afficheNomMachine():
        return os.getenv('COMPUTERNAME')
     
    def afficheNetBios():
        return os.getenv('USERDOMAIN')
     
    def afficheDomaine():
        return os.getenv('USERDNSDOMAIN')
     
    def afficheLogonServer():
        return os.getenv('LOGONSERVER')
     
    def afficheHeureOuvertureSession():
        return strftime('%X')
     
    def testExistenceFichier(filename):
        try:
            sys.path.append('//server2003/NETLOGON/')
            fichier = open("proverbes.csv", 'r')
            liste=fichier.readlines()
            fichier.close()
            return liste
        except:
            return 0
     
    def afficheProverbe():
        liste=testExistenceFichier('')
        if (liste<>0):
            randNr = random.randint(0,len(liste)-1)            
            return liste[randNr]        
        else:
            return "Le fichier proverbes.csv n'existe pas."
     
     
    os.system("cls")
    print afficheMsgBienvenue()
    print afficheNomUser()
    print afficheNomMachine()
    print afficheNetBios()
    print afficheDomaine()
    print afficheLogonServer()
    print afficheHeureOuvertureSession()
    print afficheProverbe()
     
     
    raw_input("Appuyez sur entree pour quitter le programme...")

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    Bonsoir,

    1- c'est peut-être bête mais as-tu vérifier les droits d'accès ou bien d'accéder au fichier avec un chemin absolu

    2- quelle ressource? si tu parles de ton fichier .py franchement créé, as-tu mis à jour la PYTHONPATH (http://mgltools.scripps.edu/document...an-importerror)

    a+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Bonsoir et merci de vous être donné la peine de me répondre.

    J'ai créé un fichier batch qui m'exécute le script et précise où est situé l'interpréteur Python.

    Voici le batch en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    rem - path to python23 folder, %\0.. refers to the current directory
    SET PYTHONPATH=\\server2003\NETLOGON\Python25
    SET SCRIPTPATH=\\server2003\NETLOGON
     
    rem - path to script to execute
    %PYTHONPATH%\python.exe  %0\..\init_script.py
    pause
    > D'après mon code, le chemins vers proverbes.csv est bien absolu, non?
    > Les droits sont configurés pour les utilisateurs enregistrés (Authentificated User en Lecture uniquement). J'ai eu la même erreur en contrôle total.

    2. L'interpréteur Python est installé uniquement sur le serveur. Ceci afin d'éviter d'installer une copie locale de Python sur chaque poste. Mon problème survient lors de l'import de la bibliothèque init_modules.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Si je ne m'abuse, PYTHONPATH est la variable d'environnement utilisée par Python pour remplir sys.path, je ne pense pas qu'il soit recommandé de la réaffecter.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Le problème dans mon cas, c'est que Python n'est pas installé sur les machines clientes. Je dois donc redéfinir la variable PYTHONPATH pour qu'elle pointe sur l'emplacement de Python sur le serveur.

    Mon problème principal est l'ouverture du fichier proverbes.csv. Le reste du script fonctionne.

    Mon problème secondaire est que que je ne peux pas inclure de modules supplémentaires.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    C'est un chemin relatif que tu donnes pour proverbes.csv, donc python va le chercher dans le répertoire courant (que tu peux obtenir avec os.getcwd())
    Assure-toi de bien le chercher au bon endroit. Si tu pouvais nous donner l'erreur générée ça nous aiderait à comprendre ton problème.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    J'ai modifié ma fonction testExistenceFichier.
    Lorsque j'exécute le script sur le serveur, ça fonctionne (le chemin est "\\localhost\NETLOGON"), mais ça ne fonctionne pas sur le client. Le chemin renvoyé par os.getcwd() est alors C:\Windows.

    Je ne vois pas ce qui peut clocher.
    Est-ce du au fait que l'interpréteur Python ne soit pas installé sur le client mais uniquement sur le serveur?

    Merci de vos suggestions.

    Voici le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def testExistenceFichier(filename):
        try:
            sys.path.append('//server2003/NETLOGON/')
            fichier = open("proverbes.csv", 'r')
            liste=fichier.readlines()
            fichier.close()
            return liste
        except:
            return 0

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Peut-être ton script batch qui est exécuté dans C:\Windows (la commande chdir sans paramètre affiche le répertoire courant)
    Essaye un os.chdir(dossier)

    P.S.: Pour le test, tu pourrais faire en sorte qu'il affiche l'erreur, ça permettrait au moins de voir ce qui cloche.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    J'ai réussi à résoudre tous les problèmes :
    > pour le nom du chemin, il m'a fallu doubler tous les /
    > pour les caractères accentués dans la console Windows, j'ai utilisé la fonction decode(sys.stdout.encoding) qui me les affiche correctement
    > pour l'import du module annexe, j'ai d'abord spécifié le nom du path (sys.path.append('\\\\server2003\\BETLOGON\\') ) puis fait l'import.

    Encore merci pour ton aide, oiffrig !!


    Si vous avez des suggestions à faire, elles sont les bienvenues.

    Voici les sources :
    Fichier start.bat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off 
    cls
    rem - Chemin vers les répertoires de Python et du script
    SET PYTHONPATH=\\server2003\NETLOGON\Python25
    SET SCRIPTPATH=\\server2003\NETLOGON
     
    rem - Exécution du script
    START /MAX %PYTHONPATH%\python.exe  %SCRIPTPATH%\init_script.py
    Fichier init_script.py :
    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
     
    # -*- coding:Latin-1 -*-
    import sys
    sys.path.append('\\\\server2003\\NETLOGON\\')
    from init_modules import *
     
     
    os.system("cls")
    print "\t\tBienvenue "+afficheNomUser().encode(sys.stdout.encoding)
    print "  Vous venez de vous loguer sur >> "+ afficheNomMachine().encode(sys.stdout.encoding)
    print "\n     ",
    pause()
    print "\n"
    print "  Votre nom Netbios est >> "+ afficheNetBios().encode(sys.stdout.encoding)
    print u"  Vous êtes sur le domaine >> ".encode(sys.stdout.encoding)+afficheDomaine()
    print "  Votre serveur de login est >> "+afficheLogonServer()
    print "\n     ",
    pause()
    print "\n"
    print "  Il est " +afficheHeureOuvertureSession()
    print "  Et le proverbe du jour est : \n  >>  "+afficheProverbe()
    print "     ",
    pause()
    print "\n"
    print "\t\t"+afficheMsgBienvenue()+" !!\n\n"
     
    j=['\t     >> ','T','H','E',' ','E','N','D',' << ',' ']
    for i in range(10):
        print j[i],
        sleep(0.25)
    sleep(5)
    Fichier init_modules.py :
    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
    71
    72
    73
    74
    75
    76
     
    # -*- coding:Latin-1 -*-
     
    #importe les bibliothèques nécessaires
    from time import strftime
    from string import atoi
    import os
    import random
    import sys
    from time import sleep
     
    # Fonction pause : affiche des *
    def pause():
        for i in range(15,-1,-1):
            print "*",
            sleep(0.1)
     
    # Renvoie un message de bienvenue en fonction de l'heure de la journée
    def afficheMsgBienvenue():
        # Recuperer l'heure système
        heure=atoi(strftime('%H'))
     
        if (heure<6 and heure >=0):
            return "Bonne nuit"
     
        if (heure>6 and heure<12):
            return u"Bonne matinée".encode(sys.stdout.encoding)
     
        if (heure>=12 and heure<18):
            return u"Bonne après-midi".encode(sys.stdout.encoding)
     
        if (heure>=18):
            return u"Bonne soirée".encode(sys.stdout.encoding)
     
    # Affiche le nom de l'utilisateur
    def afficheNomUser():
        return os.getenv('USERNAME')
     
    # Affiche le nom de l'ordinateur
    def afficheNomMachine():
        return os.getenv('COMPUTERNAME')
     
    # Affiche le nom de domaine Netbios
    def afficheNetBios():
        return os.getenv('USERDOMAIN')
     
    # Affiche le nom de domaine Active Directory
    def afficheDomaine():
        return os.getenv('USERDNSDOMAIN')
     
    # Affiche le serveur de logon
    def afficheLogonServer():
        return os.getenv('LOGONSERVER')
     
    # Affiche l'heure d'ouverture de session
    def afficheHeureOuvertureSession():
        return strftime('%X')
     
    # Vérifie que le fichier spécifier existe
    def testExistenceFichier(filename):
        try:
            f = open('\\\\server2003\\NETLOGON\\'+filename, 'r')
            liste=f.readlines()
            f.close()
            return liste
        except:
            return 0
     
    # Affiche aléatoirement un proverbe situé dans le fichier proverbes.csv
    def afficheProverbe():
        liste=testExistenceFichier('proverbes.csv')
        if (liste<>0):
            randNr = random.randint(0,len(liste)-1)            
            return liste[randNr].decode('iso-8859-15').encode(sys.stdout.encoding)        
        else:
            return "Le fichier proverbes.csv n'existe pas."

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Encore une note: tu peux éviter de devoir doubler tous les \ (ce qui peut devenir lourd) en utilisant un "raw string", qui ne tient pas compte des séquences d'échappement (\n, \t, \\, etc):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sys.path.append(r'\\server2003\NETLOGON' + '\\')
    Seule limitation: tu ne peux pas finir par un \ seul

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Merci pour le conseil. Je vais modifier le script.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    J'aurais encore une dernière question.

    Est-il possible d'utiliser win32api sur les machines clientes sans copier les dll localement (pywintypes22.dll et pythoncom22.dll) ?

    Merci.

    EDIT : J'ai trouvé la solution :
    Après avoir copié les dll dans le dossier de Python sur le serveur, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import pythoncom
    import pywintypes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script Python sur serveur web
    Par Freyskeyd dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 04/01/2011, 00h40
  2. Afficher les réponses d'un script python sur un page web
    Par Gregzz dans le forum Réseau/Web
    Réponses: 8
    Dernier message: 06/08/2010, 12h48
  3. Lancer rapidement un script Python sur Mac
    Par rambc dans le forum Général Python
    Réponses: 2
    Dernier message: 29/09/2009, 12h04
  4. [MySQL] script de login recuperer des informations sur plusieurs tables
    Par hichoum dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/07/2009, 15h35
  5. Problème sur un script de login
    Par sperron dans le forum ASP
    Réponses: 1
    Dernier message: 21/04/2006, 17h57

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