2010-02-27 7 views
4

J'ai une classe dans .NET (C#):Passant plusieurs arguments de IronPython à la méthode .NET

public class MyHelper { 
    public object exec(string script, params object[] arguments) { 
     // execute script with passed arguments in some external enviroment 
    } 
} 

J'utilise l'exécution IronPython dans mon code pour exécuter des scripts python, qui devrait, dans certains cas, appeler la méthode "exec". Je voudrais servir le moyen confortable d'appeler la méthode "exec". Quelque chose comme:

helper.exec("someExternalFunction({0}, {1}, {3})", var01, var02, var03) 

Mais je ne sais pas comment déclarer la méthode "exec" en C# pour y parvenir. En python je peux utiliser un « * args » argument:

def exec(script, *args): 
    ... do something ... 

Je ne veux pas la méthode Python séparée « exec » de la classe « MyHelper », parce que le « MyHelper » classe fournit des fonctionnalités complexes « en un seul endroit ".

Comment écrire la déclaration de la méthode "exec" en C# pour y parvenir? Ou quelle autre solution devrais-je utiliser?

Merci

+0

La façon dont vous avez déclaré la méthode exec doit accepter plusieurs arguments. Quelle erreur obtenez-vous lorsque vous tentez de l'invoquer depuis IronPython? –

+0

L'erreur est "Code d'erreur: 16; Message: erreur de syntaxe". – TcKs

Répondre

3

Le problème ici est que "exec" est un mot-clé en Python donc vous ne pouvez pas l'utiliser comme nom de votre fonction. Vous pouvez utiliser "exec_" ou exécuter ou quelque chose comme ça à la place. Alternativement, vous pouvez écrire:

getattr (aide, 'exec') (...)

+0

Vous avez raison. Il y avait primairement problème avec le nom "exec". Je suis débutant en Python et je ne savais pas que le mot-clé "exec" est de ma faute. Merci! – TcKs

1

Selon this FAQ, le MyHelper.exec que vous avez défini doit accepter à la fois un array comme second argument, ou un nombre quelconque de objects après la première string.

Si votre exemple d'appel à helper n'invoque pas comme prévu, c'est probablement une limitation de l'interpréteur IronPython, et doit probablement être filed as a bug. Cependant, avant de le classer comme un bogue, créez un script C# exécutable minimal qui montre ce que vous essayez de faire (montrez comment cela fonctionne comme prévu en C#), et un script IronPython qui tente de faire la même chose mais échoue. Cela sera inestimable pour faire fonctionner le problème.

En attendant, pourquoi ne pas simplement appeler

helper.exec("someExternalFunction({0}, {1}, {3})", [var01, var02, var03]) 

?

Questions connexes