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 :

Lancement d'un bat invisible via script VBS


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut Lancement d'un bat invisible via script VBS
    Bonjour à tous,

    Et oui encore moi !
    Voici mon nouveau problème :

    J'ai crée ce script VBS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set oShell = CreateObject ("Wscript.Shell") 
    Dim strArgs
    strArgs = "cmd /c Test.bat"
    oShell.Run strArgs, 0, True
    Set oWSHell = Nothing
    Qui doit lancer ce bat en invisible et attendre qu'il se termine !
    Ce bat lance le programme Test.exe avec comme argument test.qp et écris un fichier log en sortie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test.exe test.qp > test.log
    SAUF QUE, quand je lance le script VBS via la ligne python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    os.chdir(path)
            os.system( path+"\\Test.vbs")
    Il m'ouvre une fenêtre DOS qui reste ouverte le temps de l'execution du programme Test !
    Mais voila si je m'embête à écrire un VBS c'est bien pour lancer le bat en invisible et ne pas m'afficher cette fichue fenêtre DOS !!
    Pourtant quand je lance le VBS en unitaire ça fonctionne...

    Merci pour votre aide je m'arrache les cheveux en attendant

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Essaie de renommer le programme Python qui lance le vbs avec l'extension ".pyw". Ainsi, il sera exécuté par pythonw.exe qui n'affiche pas la console.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    J'ai essayé mais pas de changement :/

  4. #4
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Essaye avec os.popen() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from os import popen
     
    obj=os.popen(path+"\\Test.vbs")
    obj.read()
    Et mets bien-sûr en pyw.
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    J'ai essayé mais ça lance pas le .bat :/
    ça ne fait que l'ouvrir et le fermer j'ai l'impression

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut
    Bonjour

    Ce n'est pas un problème spécifique python. Sous windows, il n'est pas possible d'exécuter un bat ou un cmd via l'interpréteur de commande sans que celui-ci n'ouvre une fenêtre

    Vous avez donc deux solutions.

    1. Coder ce que fait le bat mais en vbs
    2. Coder cela en python, y-compris les appels aux exécutables externes

    Bon courage !

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Merci pour la réponse. Néanmoins, il y a un point que je ne comprends pas !


    Ce n'est pas un problème spécifique python. Sous windows, il n'est pas possible d'exécuter un bat ou un cmd via l'interpréteur de commande sans que celui-ci n'ouvre une fenêtre
    Si je lance le script VBS seul ça fonctionne. Cela n'ouvre pas de fenêtre dos et le bat est bien lancé.
    Si je lance via le script python le script VBS ça ouvre une fenêtre.

    Cela ne contredit pas ta remarque ? Ou alors je n'ai pas compris

  8. #8
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    On peut effectivement lancer un fichier .bat sans affichage de la console, grâce à un petit script en vbs. J'utilise souvent le script suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set wsc = WScript.CreateObject("WScript.Shell")
    wsc.Run "monscript.bat arg1 arg2 arg3", vbhide
    Il suffit de double-cliquer sur le fichier vbs dans le windows explorer et tout se passe bien.

    Et en lançant le fichier .vbs ci-dessus par le script Python .pyw proposé par stalacta: ça fonctionne parfaitement, et la console n'apparait pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import os
     
    obj = os.popen("monfichier.vbs")
    obj.read()
    ???

    A noter qu'il y a une solution avec seulement un fichier bat, qui consiste à lancer un programme dans le .bat avec la commande "start" et son option "/B". Quand on double-clique sur ce fichier bat, la console s'affiche 1/10s et disparait. C'est tout à fait acceptable.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    L’intérêt de lancer un .bat en invisible c'est de ne pas avoir une clignotement de mes fenêtres lors de mon calcul itératif. Donc même 0.1 secondes c'est trop !

    Sinon existe t il un moyen dans ton exemple de script d'attendre que le bat se soit terminé avant de terminer le script ?
    Comme l'option "True" dans mon exemple.

    Merci pour ton aide.

  10. #10
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par coolpix77 Voir le message
    ...
    existe t il un moyen dans ton exemple de script d'attendre que le bat se soit terminé avant de terminer le script ?
    Comme l'option "True" dans mon exemple
    ....
    Je ne pratique pas le vbs, mais il me semble: http://msdn.microsoft.com/en-us/libr...=vs.84%29.aspx

    Tu as tout de même bien vu dans mon précédent message que le lancement du vbs par un script Python .pyw se faisait chez moi sans affichage de la console?
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tu as tout de même bien vu dans mon précédent message que le lancement du vbs par un script Python .pyw se faisait chez moi sans affichage de la console?
    Oui oui j'ai bien vu ! Mais la solution proposé par stalacta ne lance pas le bat. J'ai l'impression qu'il ne fait que le lire.

    Du coup je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set wsc = WScript.CreateObject("WScript.Shell")
    wsc.Run "Flow.bat", vbhide,True
    Comme ça il attend que le bat se soit fini ... mais quand je fais ça j'ai la fenetre dos qui s'ouvre le temps de l’exécution du bat

    edit: Ok je comprends mieux le os.system lance quoiqu'il arrive le script vbs dans une fenêtre dos (c'est ce que la fonction system fait)

    Du coup j'ai tenté avec os.spawnnl(os.P_wait,"Script.vbs") mais j'ai un jolie "pythonw.exe ne répond plus " xD

  12. #12
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Et en lançant le fichier .vbs ci-dessus par le script Python .pyw proposé par stalacta: ça fonctionne parfaitement, et la console n'apparait pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import os
     
    obj = os.popen("monfichier.vbs")
    obj.read()
    Oui, j'avais testé et ça avait parfaitement marché pour moi aussi. C'est d'ailleurs pour ça que j'avais proposé le code. Il y a aussi une autre solution du module os :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    os.startfile('programme.exe')
    #ou encore
    os.startfile('programme.vbs')
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

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

Discussions similaires

  1. [BODS 12.2] Lancement de .bat via script
    Par dnyyy dans le forum BODI
    Réponses: 11
    Dernier message: 05/08/2013, 17h12
  2. Lancement d'un job Talend via script
    Par bstevy dans le forum Exécution et industrialisation
    Réponses: 7
    Dernier message: 26/11/2009, 15h22
  3. création macro xls via script vbs
    Par avenGer59 dans le forum VBScript
    Réponses: 3
    Dernier message: 28/09/2009, 09h22
  4. Probleme recuperation d'une valeur : script vbs -> .bat
    Par pinpin_du_net dans le forum Windows
    Réponses: 3
    Dernier message: 10/05/2005, 12h43

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