Partage
  • Partager sur Facebook
  • Partager sur Twitter

Commande Unix sous WIN appelée par script Python

Sujet résolu
    26 février 2016 à 9:56:56

    Bonjour à tous !

    De formation Ingé Electronique, j'occupe mon premier emploi dans une boite de Semi-conducteurs depuis Octobre :) Et comme beaucoup de gens s'en doute le monde de l'entreprise c'est loin de la théorie des études et on se retrouve à faire des trucs moches (d'un point de vu informatique hein ! ;) )...

    Voilà donc mon problème que je poste ici parce que le projet regroupe différent langages de prog et système d'exploitation.. Ca commence bien !

    Alors voilà dans ma boite certain de nos ATE (Hardware : Automated Test Equipment) sont supportés sous windows et avec des programmes de tests codés en Visual Basic (outch..) et d'autres sous Unix avec es programmes de tests codées en C++. Le problème c'est que tout ce petit monde doit fonctionner en harmonie et des corrélations doivent être faites régulièrement entre tous les programmes. On m'a donc chargé de faire un programme en Python que les utilisateurs pourront ditribuer et executer en standalone sur des PCs seuleemnt équipés de windows (je précise que je n'ai de mot à dire sur aucun des langages, système d'exploitation, etc...).

    Mon script appelle des commandes Unix dans la console windows grâce à GOW et os.system

    Jusque là je m'en sort plutôt pas mal, seulement un problème "esthétique" me gêne : Mon script à un moment appele la commande suivante (qui fonctionne super) :

    os.system("Dos2Unix monfile")

    Et cette commande n'est pas silencieuse ce qui fait qu'à chaque fichier converti elle ouvre la console... -_-'

    J'ai essayé de la rendre silencieuse avec l'option -q (doc dos2unix: ftp://ftp.univ-fcomte.fr/_Pour_Les_Etudiants_/Outils_Bureautiques_2009-2010/fscommand/Gimp/gimp_2_6_6/lib/txt_unix-dos/README.TXT )

    os.system("Dos2Unix -q monfile")

    Mais Dos2Unix interprete l'option comme un fichier et non comme une option... Même en tapant cette ligne de commande directement dans la console j'ai toujours le même message :" Dos2Unix: Can't stat '-q' ."

    si l'un de vous a une idée soit pour des pistes de recherches, soit pour rendre ma commande os.system silencieuse malgrès le fait que la commande unix ne le soit pas....

    Merci beaucoup et au plaisir de discuter !

    (Si un admin sait dans quel catégorie ce message à le plus sa place n'hésitez pas à déplacer. merci !)



    • Partager sur Facebook
    • Partager sur Twitter
    Si tu peux toujours reporter au lendemain ce que tu devais faire la veille, alors tu as réussi ta vie !
      26 février 2016 à 11:20:16

      Bonjour,

      Comment lance tu ton script ? Essai

      pythonw.exe monscript.py

      python.exe est destiné aux appli type console, pythonw.exe pour les appli avec interface graphique.

      • Partager sur Facebook
      • Partager sur Twitter
        26 février 2016 à 12:04:18

        Bonjour

        Je le lance depuis une interface Tkinter. Le script est un standalone crée avec py2exe. Je vais regarder du coté de mon setup.py du coup :) Merci

        • Partager sur Facebook
        • Partager sur Twitter
        Si tu peux toujours reporter au lendemain ce que tu devais faire la veille, alors tu as réussi ta vie !
          26 février 2016 à 13:17:09

          Alors petit update, :)

          le lancement avec :

          	
          pythonw.exe monscript.py

          ne change rien à mon problème.

          Je vais chercher du coté de GOW en effet bien qu'il permettre l'utilisation de la commande dos2unix je ne suis pas certaine qu'il prenne en compte les flags..

          Sinon (mais je pense pouvoir chercher sur le forum python ou unix ou dos...) quels autres moyen efficace existe tíl pour mon script Python pour convertir mes fichiers txt en fichier unix friendly ?

          Merci !

          • Partager sur Facebook
          • Partager sur Twitter
          Si tu peux toujours reporter au lendemain ce que tu devais faire la veille, alors tu as réussi ta vie !
            26 février 2016 à 13:44:48

            os.system est déprécié tu devrais utiliser un subprocess.

            Dans ton cas ça devrait ressembler à ça (pas testé) :

            subprocess.check_call(['Dos2Unix', 'monfichier'], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)

            Voir la doc pour comment se servir de subprocess.

            Aussi, je vois que Dos2Unix te permet de passer plusieurs fichiers en un appel. Il serait intéressant (mais accessoire) de te construire la chaine avec les noms de fichiers "fichier1 fichier2 fichier3" dans ta boucle pour ensuite ne faire qu'un appel à Dos2Unix.

            Sinon un script pour passer de un fichier de dos vers unix ça doit être facile à trouver et pas bien compliqué à coder. L'appel à un programme externe pour remplacer les \r\n par des \n ça me semble déjà pas mal overkill.

            PS : Je sais pas ce que c'est GOW (à part God Of War ou Gears Of War).

            -
            Edité par Baptiste00 26 février 2016 à 13:48:08

            • Partager sur Facebook
            • Partager sur Twitter
              26 février 2016 à 14:06:47

              En fouinant du côté des gars de l'IT j'ai choisi d'utiliser une commande "cat" pour ma solution.
              cat monfile | tr -d '\r' >monfile


              Ca fonctionne bien !

              Maintenant je fais appele à plusieurs os.system. Vu que je veux faire ce programme proprement je vais regarder du côté de subprocess pour les remplacer !

              Merci bien Baptiste !

              Je note comme résolu

              • Partager sur Facebook
              • Partager sur Twitter
              Si tu peux toujours reporter au lendemain ce que tu devais faire la veille, alors tu as réussi ta vie !

              Commande Unix sous WIN appelée par script Python

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown