Partage
  • Partager sur Facebook
  • Partager sur Twitter

Executer un code lisp depuis python

Sujet résolu
    7 février 2013 à 8:35:35

    Bonjour,

    Petite question pratique, sauriez vous comment exécuter un code lisp depuis python ? Je ne parle pas forcément de "traduire le code" mais plutôt d'exécuter un "noyau" de calcul depuis python.

    Je m'explique, je développe un programme en python, mais une routine fastidieuses de calcul a été effectuée en lisp. Plutôt que de "reprogrammer", j'aurai aimé l'exécuter depuis mon soft.

    On peut l'exécuter depuis un terminal, via quelques lignes de commandes. Du coup, je me dis que c'est peut-être possible !

    Magie du python, opèreras tu ?

    • Partager sur Facebook
    • Partager sur Twitter
      7 février 2013 à 10:18:44

      A mon avis, jettes un coup d'oeil du cote de ce module.

      EDIT: J'ai aussi trouve un tuto interessant sur le module en question.

      -
      Edité par stackOverflow 7 février 2013 à 10:56:12

      • Partager sur Facebook
      • Partager sur Twitter
        7 février 2013 à 10:42:43

        Super, je vais regarder ça ! Je devrais en savoir plus ce soir !

        Merci

        • Partager sur Facebook
        • Partager sur Twitter
          7 février 2013 à 14:54:20

          Si ton code en Lisp n'a pas trop de dépendances, ça peut éventuellement se hacker avec ce module : http://norvig.com/lis.py :)

          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !
            8 février 2013 à 8:54:54

            Bonjour,

            Merci pour ces infos.

            J'ai un peu regardé le module pour "hacker", le code dont je dispose est assez gros et fait appel à des fichiers texts extérieurs (pour l'import et l'export) de données. 

            Si j'ai bien compris, lis.py aiderai à traduire ligne par ligne en gros non ?

            Du coup je me suis plus penché vers la solution du module "subprocess". J'ai essayé qq commandes comme "call", mais je n'ai aps tout compris également. Parfois ça marche, parfois pas, surtout lorsqu'on veut mettre des arguments, etc.

            Du coup, je dois mal écrire qqch.

            Pour moi, qd je veux faire tourner mon logiciel, je n'ai besoin que de qq lignes:

            1) je vais dans la directorie ou de trouve mon programme lisp

            2) je lance lisp en tappant la commande "clisp"

            3) une fois lisp ouvert, je charge un fichier : (load "MonFichier.lisp")

            4) puis je l'exécute : (run)

            Pour exécuter lisp, quelque chose comme

            import subprocess
            
            # Simple command
            subprocess.call(['clisp'], shell=True)

            devrait marcher (je ne suis pas face à mon ordi pour vérifier), mais du coup, comment lancer les étapes 3 et 4 ? Une petite idée ? Devrais-je procéder autrement ?

            -
            Edité par lelorrain7 8 février 2013 à 8:56:05

            • Partager sur Facebook
            • Partager sur Twitter
              8 février 2013 à 9:06:23

              On devrait aussi pouvoir exécuter le code dans un terminal en utilisant la commande suivante :

              clisp <fichier>.lisp

              Du coup, peut-être que

              subprocess.call(['clisp <fichier>.lisp'], shell=True)

              devrait marcher


              • Partager sur Facebook
              • Partager sur Twitter
                8 février 2013 à 9:57:48

                lelorrain7 a écrit :

                On devrait aussi pouvoir exécuter le code dans un terminal en utilisant la commande suivante :

                clisp [fichier].lisp

                Du coup, peut-être que

                subprocess.call(['clisp [fichier].lisp'], shell=True)

                devrait marcher


                Plutôt comme ça :

                subprocess.Popen(['/chemin/vers/clisp', '[fichier].lisp'])

                -
                Edité par nohar 8 février 2013 à 11:17:45

                • Partager sur Facebook
                • Partager sur Twitter
                Zeste de Savoir, le site qui en a dans le citron !
                  8 février 2013 à 14:06:47

                  Il y a de la subtilité dans l'air, mais en fait ça vient du code lisp. En effet, juste indiquer le nom du fichier ne marche pas. Il faut en fait lui dire qu'il doit quiter à la fin, etc...

                  Donc en fait, la ligne de code devrait être :

                  subprocess.Popen(['/chemin/vers/clisp', '-q -q -on-error abort -x '(progn (load "fichier.lisp") (run) (quit))''])

                  puisque la commande lisp qui permet d'effectuer tout ça est (depuis un terminal) :

                  clisp -q -q -on-error abort -x '(progn (load "fichier.lisp") (run) (quit))'




                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 février 2013 à 20:06:25

                    Alors en fait, ça ne marchais pas... alors j'ai recopié un exemple dont un a fini par marcher... (à force d'itération lol). Enfin bref, si qqn souhaite un jour exécuter un programme lisp depuis python (en supposant qu'un exécuteur lisp soit installé, dans mon cas clisp), voici comment faire (nb: mon fichier de commande .py se trouve dans le dossier ou je cherche à exécuter mon programme) :

                    import shlex,subprocess
                    
                    command_line=""" clisp -q -q -on-error abort -x '(progn (load "fichier.lisp") (run) (quit))' """
                    print(command_line)
                    
                    args=shlex.split(command_line)
                    print(args)
                    
                    subprocess.Popen(args)


                    Go go biiinnngoooo

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Executer un code lisp depuis 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