我正在使用 Iron Python 作为添加的“免费”工具来测试将通信包装到某些自定义硬件的 API,以便非开发团队可以通过 python 使用硬件。
但是我不知道如何让 .NETvoid func(params object[] args)
映射到 Python def (*args)
。
这里有一些代码来解释。
我有一种允许注入日志回调以格式化和处理消息的类型,它遵循 Console.WriteLine 和 Debug.WriteLine 的签名。
public class Engine
{
Action<string, object[]> _logger;
public void Run()
{
Log("Hello '{0}'", "world");
}
public void SetLog(Action<string, object[]> logger)
{
_logger = logger;
}
void Log(string msg, params object[] args)
{
_logger(msg, args);
}
}
在我的 IronPython 代码中
import clr
from System import *
from System.IO import Path
clr.AddReferenceToFileAndPath(Path.GetFullPath(r"MyAssembly.dll"))
from MyNamespace import *
def logger(msg, *args):
print( String.Format(msg, args))
print( String.Format(msg, list(args)))
print( String.Format(msg, [args]))
a=[]
for i in args:
a.append(i)
print( String.Format(msg, a) )
e = Engine()
e.SetLog(logger)
e.Run()
输出
Hello '('world',)'
Hello 'IronPython.Runtime.List'
Hello 'IronPython.Runtime.List'
Hello 'IronPython.Runtime.List'
我想
Hello 'world'