我要求在c#应用程序中使用Python分析。
准确地说:c#应该调用python脚本并将输出返回到c#应用程序中以进行进一步处理。
我已经尝试使用许多人推荐的IronPython。
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
engine.ExecuteFile(@"DemoPythonApplication\SentimentAnalysis.py", scope);
dynamic testFunction = scope.GetVariable("create_sentiment_analysis"); //calling a function from python script file
var result = testFunction(); //This function is returning a dynamic dictionary, which I can use in my c# code further
但是IronPython的局限性在于,它不提供对许多python库的支持,例如pandas,numpy,nltk等。这些库正在python脚本中使用。 (由于我们有不同的团队从事python工作,因此我无法控制他们使用特定的库。)
我尝试的另一个选项是运行python进程并调用脚本
private static readonly string PythonLocation = @"Programs\Python\Python37\python.exe"; //Location of Python.exe
private static readonly string PythonScript = @"DemoPythonApplication\SentimentAnalysis.py"; //Location of Python Script
private static void ProcessInPython(int a, int b)
{
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = PythonLocation;
start.Arguments = string.Format("{0} {1} {2}", PythonScript, a, b);
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
using (Process process = Process.Start(start))
{
using (StreamReader reader = process.StandardOutput)
{
var result = reader.ReadToEnd();
Console.Write(result);
}
}
}
尽管使用这种方法存在局限性,但我只能以string
的形式在控制台上打印任何内容,而无法获得python函数返回的输出。
如果我使用第二种方法,我也不知道如何从python脚本文件中调用特定函数。
有人可以针对这种情况提供在c#中使用python的最佳实践吗?