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

C# Discussion :

Interraction C# et Python [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Apprenti développeur .NET/Java/Python
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti développeur .NET/Java/Python
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Par défaut Interraction C# et Python
    Bonjour,

    Je suis chargé de découvrir comment fonctionne l'interraction entre le Python et le C# et j'ai quelque petits soucis dans mes tests.

    J'ai installé IronPython, PTVS (PythonTool), j'ai également ajouté les références IronPython.dll et Microsoft.Scripting.dll. Pourtant je ne parviens même pas à afficher un simple print Python depuis le code C#.

    Voici ce que j'ai fait avec en commentaire les essais non-concluants (merci de votre aide):
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    using IronPython.Hosting;
     
    //using Microsoft.CSharp.RuntimeBinder;
    //using Microsoft.Scripting.Hosting.ScriptEngine;
     
     
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                var engine = Python.CreateEngine();
     
                /*var RandPath = Path.GetFullPath(@"random.py");
                var RandAsm = Assembly.LoadFile(RandPath);
                engine.Runtime.LoadAssembly(RandAsm);
                dynamic random = engine.ImportModule("random");*/
     
                //Python.CreateEngine();
                //dynamic scope = engine.CreateScope();
                //engine.ExecuteFile(@"C:\Users\apprenti\Desktop\random.py",scope);
     
                //engine.ExecuteFile(@"C:\Users\apprenti\Desktop\random.py");
     
                //engine.Execute(WindowsFormsApplication1.Properties.random);
     
                int y=0;
                var theScript = @"def Calc(y):  #Ceci est le code Python
            y=1+1
           #print(y)
    Calc()";
                engine.Execute(theScript);
                MessageBox.Show(y.ToString()); /*la valeur retournée est 0
                                                            alors que je cherche à obtenir 2*/

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut

    Merci de penser à utiliser la balise CODE afin de faciliter la lecture...

    Citation Envoyé par Keysko Voir le message
    MessageBox.Show(x.ToString());
    Elle sort d'où ta variable x ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Candidat au Club
    Homme Profil pro
    Apprenti développeur .NET/Java/Python
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti développeur .NET/Java/Python
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Par défaut
    Ah oui, tous les "y" s'appelaient "x" avant de tenter quelque chose d'autre, du coup j'ai oublié de changer le "x" du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(x.ToString());
    en "y".

    Mais le résultat reste tel que je l'ai décrit ci-dessus

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Ok, merci pour ces précisions, et pour l'ajout de la balise CODE à ton premier post

    Voici un code qui fonctionne (je l'ai fait dans une application console) :
    Code C# : 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    private static ScriptEngine _engine;
    private static ScriptScope _scope;
     
    static void Main(string[] args)
    {
        _engine = Python.CreateEngine();
        _scope = _engine.CreateScope();
     
        // Variable contenant le code python
        var theScript = new StringBuilder();
     
        // On crée une méthode Calc qui retourne une somme
        theScript.AppendLine("def Calc(a, b):");
        theScript.AppendLine("  return a + b");
     
        // On affecte le résultat de Calc dans la variable x
        theScript.AppendLine("x = Calc(2, 3)");
     
        // On exécute et récupère le résultat
        var result = Evaluate(theScript.ToString());
        Console.WriteLine(result.ToString());
     
        Console.ReadKey();
    }
     
    private static object Evaluate(string code)
    {
        try
        {
            // On passe le code au moteur
            var source = _engine.CreateScriptSourceFromString(code, SourceCodeKind.Statements);
     
            // On exécute le code
            source.Execute(_scope);
        }
        catch (Exception ex)
        {
            throw;
        }
     
        // On vérifie que la variable x soit présente
        if (!_scope.ContainsVariable("x"))
        {
            Console.WriteLine("x does not exist.");
            return null;
        }
     
        // On retourne la valeur de la variable x
        return _scope.GetVariable<object>("x");
    }
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Candidat au Club
    Homme Profil pro
    Apprenti développeur .NET/Java/Python
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti développeur .NET/Java/Python
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Par défaut
    Merci pour ton aide précieuse, tu viens de sauver un écran d'une souris volante (les nerfs qui montaient après 3 jours de recherches vaines sur internet).

    J'ai lu ton code pour essayer de le comprendre grossomodo, et je comprends à peu près, les commentaires détaillent bien chaque étape, c'est clair et précis, encore merci!!

    (Si je bloque sur quelque chose en rapport avec ce code je posterai à nouveau un message dans ce topic)

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

Discussions similaires

  1. Interraction entre python et du code C/C++
    Par fyk91 dans le forum Interfaçage autre langage
    Réponses: 11
    Dernier message: 27/11/2007, 08h34
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 14h51
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

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