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

Langage Perl Discussion :

[Module Config] Cohérence des valeurs ?


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Par défaut [Module Config] Cohérence des valeurs ?
    Bonjour à tous,

    Dans un script j'utilise le module Config de perl pour déterminer la version de l'OS sur laquel le script est en train de tourner et décider d'un certain nombre d'actions en conséquence. Pour cela je récupère la valeur de la clef 'osvers' du hash %Config.

    Mon problème est le suivant: sans raison apparente des incohérence apparaissent dans les valeurs remontées dans cette variable. Par incohérence j'entend des valeurs identiques pour deux OS différent, et (presque pire) deux valeurs différentes pour un même OS.

    Exemples en utilisant la commande perl -e "use Config;print $Config{osvers};":
    Sur mon pc (XP Pro SP3 32bits, ActivePerl 5.8.9.827) => 5.00 comme valeur remontée
    Sur celui d'un collègue (XP Pro SP3 32bits, ActivePerl 5.10.1.1008) => 5.2
    Sur un troisième (Win 7 64bit, ActivePerl 5.8.9.829) => 5.2
    Sur un Windows Server 2008 R2 => 5.2 (aussi)
    Sur un Windows 2003 SP2 => 5.00

    Jusqu'à présent je pensait la valeur de osvers unique pour un OS donné (contrairement à $^O qui renvoi à une typologie d'OS). La différence constatée sur XP m'inquiète, le comportement du script devant être homogène pour une version d'OS donnée (je pourrais... difficilement mais bon.. traiter l'identité entre valeurs pour des OS différents).

    Avez vous déjà rencontré ce problème ? Est-ce une erreur d'utilisation de ma part sur cette variable ? Sinon, comment faites vous pour déterminer la version d'OS sur laquelle vous vous exécutez ?

    Merci d'avance.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Il faudrait nous donner les listes des informations que tu souhaites récupérer et en fonction de cela, nous t'orienterons peut être vers un module plus adéquat.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Par défaut
    En fait la version d'OS est la seule information qui m'intéresse dans Config car je fais une correspondance OS/liste d'actions à réaliser (grosso modo).

    Présentement seuls Windows 2008 R2 et Linux RHEL 5.4 nécessitent une identification non équivoque car les actions que le script doit réaliser présentent des différences par rapport aux autres (dues à un changement de normes).

    Seulement je prend en considération que le prédécesseur de ce (nouveau) script à vécu plus de 10 ans, et que je ne sais pas vraiment ce que l'avenir réserve donc je cherche à être le plus ouvert possible. Je pensait que osvers me permettrait d'avoir ce type de flexibilité....

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Par défaut
    Bon après quelques recherche (assez breves en fait, je ne sais pas comment j'ai pu passer à coté) il apparait que le contenu de %Config est herité de l'OS sur lequel Perl est compilé. Utilisant une distrib pré-compilée, cela explique les 'incohérences' constatées, qui du coup n'en sont pas.

    Pour ce qui est de la récupération de la version d'OS je pense que je vais avoir à passer par un test de type pour récupérer l'info de man ière appropriée.

    Quelque chose comme (pseudo code)
    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
    use MWin32;
    ...
    sub GetOSVer()
    {
        if ($^O eq 'MSWin32')
        {
            return MSWin32::GetOSName(); # probable traitement sur la chaine ici avant le return selon ce qui est effectivement renvoyé par GetOSName
        }
        elsif ($^O eq 'linux')
        {
            return ... ; # equivalent GetOSName sous linux ?
        }
        else
        {
            return 'unknown';
        }
    }
    Qu'en pensez vous ? Savez vous si il existe un equivalent à GetOSName sous linux ?

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Sys::Info;
     
    if ( $^O eq 'MSWin32' ) {
      require Win32;
      print 'OSName : ',           Win32::GetOSName(),        "\n";
      print 'GetOSDisplayName : ', Win32::GetOSDisplayName(), "\n";
      print 'GetOSVersion : ',     Win32::GetOSVersion(),     "\n";
    }
    elsif ( $^O eq 'linux' or $^O eq 'darwin' ) {
      print 'uname -a : ', `uname -a`;
    }
    else {
      print 'unknown';
    }
     
    ##
    print "\n\n=================================\n\n";
     
    my $info = Sys::Info->new;
    printf "Perl version is %s\n", $info->perl;
    if ( my $httpd = $info->httpd ) {
      print "HTTP Server is $httpd\n";
    }
    my $cpu = $info->device('CPU');
    my $os  = $info->os;
    printf "Operating System is %s\n", $os->name( long => 1 );
    printf "CPU: %s\n", scalar $cpu->identify;
    Voilà !!

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Par défaut
    Merci pour ce retour.

    Malheureusement après une première série de tests via perl -e "use Win32;print Win32::GetOSName();", il y a toujours des incohérences remontées sous Windows server 2008.

    Sur quatre serveurs 2008 testés j'ai eu les résultats suivant:
    Win7Service Pack 1
    Win7 (pour deux serveurs)
    WinXP/.Net

    Cela semblerait lié à l'OS ou à son shell pour une raison qui m'échappe (ca en fait des choses qui m'échappent...). Un collègue me dis qu'il rencontre le même problème d'identification 'Windows 7'' sur nos serveurs 2008 avec un de nos outils Computer Associate et que nous ne sommes pas les seuls (une entrée KB chez CA existant sur le sujet).

    Reste les clefs de registre... en espérant qu'il y en ait une qui existe sur tous les type de serveurs M$ et qui contienne une valeur cohérente.

    Sinon pour le linux, c'est nikel ! (ouf)

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

Discussions similaires

  1. Tri des valeurs dans un DBGrid
    Par soviet dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/06/2015, 14h18
  2. Réponses: 1
    Dernier message: 25/10/2012, 13h05
  3. Réponses: 3
    Dernier message: 08/10/2008, 16h34
  4. Réponses: 4
    Dernier message: 28/02/2008, 12h26
  5. Test de cohérence des valeurs
    Par Ryan Sheckler dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 21/12/2006, 22h45

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