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 :

Python et netsh cmd sur WIN7 x64


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 52
    Points
    52
    Par défaut Python et netsh cmd sur WIN7 x64
    Bonjour a tous,

    Voila j'ai le probleme suivant:
    Je veux verifier l'interfacve MBN sur un Win7 x64bits en utilisant la commande "netsh mbn show interfaces".
    En utilisant cette commande dans une fenetre DOS, je n'ai pas de probleme, j'ai bien les infos demandees de mon interface MBN.
    Par contre en Python 32 bits avec la commande suivante
    "print subprocess.Popen(cmd,stdout=subprocess.PIPE).stdout.read(-1)"
    il me repond par "No MBN sow interface cmd".
    Ce probleme existe uniquement sur des OS 64bits. Je n'ai pas de probleme avec des OS 32bits.

    Si qq a deja eu ce type de probleme et pourait m'aider je l'en remercie d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 242
    Points : 36 699
    Points
    36 699
    Par défaut
    Salut,

    Bonne nouvelle: je peux reproduire le problème sur mon environnement Python 2.7/32 bits sur Windows 7/64 bits.

    Ma théorie est que un process 32 bits crée, par défaut, des sous process 32 bits et si vous n'avez que le mbn 64 bits, netsh ne le trouvera pas pour des raisons que seul WOW64 connaît.

    Comment tester la théorie?
    A défaut d'avoir trouvé comment visualiser le type 32/64 bits du process, j'ai pu constater que la sortie de la commande "netsh help" était différente i.e. WOW64 est bien au milieu.
    Note: une des différences est qu'il n'affiche pas mbn comme commande.

    Comment changer le défaut i.e. forcer la création d'un process 64 bits à partir d'un process 32 bits? Et y'a-t-il de quoi faire cela depuis Python?
    No idea.

    Cordialement,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre expérimenté
    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
    Points : 1 384
    Points
    1 384
    Par défaut
    Apparemment sur une installation de Win7 x64, il existe deux versions de netsh: une version 64 bits dans %SYSTEMROOT%\system32 et une version 32 bits dans %SYSTEMROOT%\SysWOW64.
    Lorsqu'on exécute netsh depuis un processus 32 bits, WoW64 redirige automatiquement sur la version 32 bits de netsh (je suppose qu'en fait il redirige tout system32 vers sysWOW64).

    J'ai trouvé une solution ici: http://mail.python.org/pipermail/pyt...ne/009263.html.

    J'ai testé, cela semble fonctionner, mais j'ai du adapter la réactivation de la redirection pour qu'elle fonctionne de façon fiable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import ctypes, subprocess
    k32 = ctypes.windll.kernel32
    wow64 = ctypes.c_long( 0 )
    k32.Wow64DisableWow64FsRedirection( ctypes.byref(wow64) )
    subprocess.Popen('netsh')    # lance la version 64 bits, vérifié avec Process Explorer
    k32.Wow64RevertWow64FsRedirection( wow64 )

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 242
    Points : 36 699
    Points
    36 699
    Par défaut
    Merci Dividee,
    Côté code, ne serait-il pas préférable de mettre cela dans un "with" style:

    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
    from contextlib import contextmanager
    import ctypes 
     
    @contextmanager
    def disableWoW64redirection():
        k32 = ctypes.windll.kernel32
        wow64 = ctypes.c_long( 0 )
        k32.Wow64DisableWow64FsRedirection( ctypes.byref(wow64) )
        try:
            yield
        finally:
            k32.Wow64RevertWow64FsRedirection( wow64 )
     
    with disableWoW64redirection():
          subprocess.Popen('netsh')
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre expérimenté
    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
    Points : 1 384
    Points
    1 384
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Côté code, ne serait-il pas préférable de mettre cela dans un "with" [...]
    C'est une question rhétorique, mais pour enfoncer le clou, je répondrais quand-même: si, bien sûr

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 52
    Points
    52
    Par défaut
    Merci a vous tous, c'est super, ca fonctionne.

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

Discussions similaires

  1. VS2012 ultimate fr - installation impossible sur win7 pro x64
    Par lsabahi dans le forum Visual Studio
    Réponses: 0
    Dernier message: 20/03/2013, 11h56
  2. Besoin d'aide avec _winreg sur machine x64
    Par peterphonic dans le forum Général Python
    Réponses: 1
    Dernier message: 14/05/2011, 16h32
  3. Réponses: 5
    Dernier message: 02/03/2009, 13h18
  4. lancer .cmd sur Windows depuis Unix.
    Par crdcrd dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 29/01/2009, 17h58
  5. console, cmd sur pda
    Par swordblood dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 29/01/2008, 01h22

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