Передача нескольких аргументов из IronPython в метод .NET - PullRequest
4 голосов
/ 27 февраля 2010

У меня есть класс в .NET (C #):

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

Я использую среду выполнения IronPython в своем коде для запуска сценариев Python, которые в некоторых случаях должны вызывать метод "exec". Я хотел бы предоставить удобный способ вызова метода "exec". Что-то вроде:

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

Но я не знаю, как объявить метод "exec" в C # для достижения этой цели. В Python я могу использовать аргумент "* args":

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

Я не хочу иметь отдельный метод Python "exec" от класса "MyHelper", потому что класс "MyHelper" предоставляет сложные функции "в одном месте".

Как мне написать объявление метода "exec" в C # для достижения этого? Или какое другое решение я должен использовать?

Спасибо

Ответы [ 2 ]

3 голосов
/ 28 февраля 2010

Проблема в том, что exec - это ключевое слово в Python, поэтому вы не можете использовать его в качестве имени функции. Вы могли бы использовать «exec_» или выполнить или что-то подобное вместо этого. Вы также можете написать:

getattr (помощник, 'exec') (...)

1 голос
/ 27 февраля 2010

Согласно этому FAQ , определенный вами MyHelper.exec должен принимать либо array в качестве второго аргумента, либо любое число objects после первого string.

Если ваш пример вызова помощника не вызывает должным образом, это, вероятно, ограничение интерпретатора IronPython и, вероятно, должно быть подано как ошибка . Однако перед тем, как отправить сообщение об ошибке, создайте минимальный исполняемый скрипт C #, который демонстрирует, что вы пытаетесь сделать (покажите, как он работает в C #), и сценарий IronPython, который пытается сделать то же самое, но не удается. Это будет иметь неоценимое значение для решения проблемы.

А пока почему бы просто не позвонить

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

...