2010-01-28 9 views
2

Je le code suivant (juste un test):IronPython - Chargement du script de chaîne en C# 4.0 Application

var engine = Python.CreateEngine(); 
var runtime = engine.Runtime; 

    try 
    {     
     dynamic test = runtime.UseFile(@"d:\test.py"); 

     test.SetVariable("y", 4); 
     test.SetVariable("client", UISession.ControllerClient); 
     test.Simple(); 
    } 
    catch (Exception ex) 
    { 
     var eo = engine.GetService<ExceptionOperations>(); 
     Console.WriteLine(eo.FormatException(ex)); 
    } 

Mais je voudrais charger le script à partir d'une chaîne à la place.

Répondre

7

Vous pouvez utiliser engine.CreateScriptSourceFromString pour charger le script dans le cadre d'une chaîne, plutôt qu'un fichier.

 StringBuilder sb = new StringBuilder(); 
    sb.Append("def helloworld():\r\n"); 
    sb.Append(" print \"hello world\"\r\n"); 
    string code = sb.ToString(); 
    ScriptEngine engine = Python.CreateEngine();   
    ScriptSource source = engine.CreateScriptSourceFromString(code, SourceCodeKind.File); 
    ScriptScope scope = engine.CreateScope(); 
    source.Execute(scope); 
    Func<object> func = scope.GetVariable<Func<object>>("helloworld"); 
    Console.WriteLine(func()); 
+0

Hey, Cela se rapproche, je vais essayer de l'utiliser mais avec le mot-clé dynamique à la place. Je vais le marquer comme la réponse si je peux le faire fonctionner :-) – TimothyP

+0

Regardé dans ceci un peu plus, le problème ici est que source.Execute (..) renvoie toujours null. Le type de retour est dynamique, mais la valeur est null. Runtime.UseFile (...) renvoie une valeur, je me demande pourquoi. – TimothyP

3

Cet exemple du livre de recettes IronPython peut-il aider? Il s'agit de comment appeler vos méthodes de classe python à partir de C# ... mais il contient également un exemple pratique de chargement d'un script à partir d'un fichier. L'exemple fonctionne sur IronPython 2.6 (vous devez faire attention à la version qui a changé l'hébergement un peu).

http://www.ironpython.info/index.php/Using_Python_Classes_from_.NET/CSharp_IP_2.6

+0

n'est pas ma réponse essentiellement la même que celle de Tom E? Est-ce à cause du lien, ou est-ce parce que la réponse de Tom est mieux ciblée? Ne pas se plaindre ... juste curieux. – djlawler

+0

Pour moi, l'exemple de code est préférable à un lien, même si le code est copié et collé. C'est ce petit effort supplémentaire qui mérite le vote. –

+0

Je pense que c'est alors :) Je vais le classer pour référence future ... – djlawler