c# - 如何在 C# 中运行自己导入 3rd 方库的外部 python 脚本?
问题描述
我试图将 Python 代码与 C# 结合起来,以在我的 C# 应用程序中使用所有那些很酷的库,如语音识别。
我为python(IronPython)做了两个不同的项目,其中我通过VS2017中的python环境包含了我需要的模块(Speech Recognition),另一个只是我想调用这个应用程序的控制台应用程序。
我认为重点是更改 Ironpython 的 searchPaths ,然后它会起作用。
也许我做错了什么,或者它不应该工作?
C# 代码 Main.cs:
using IronPython.Hosting;
using System.Collections.Generic;
private static void Main(string[] args)
{
//Using Iron python
var engine = IronPython.Hosting.Python.CreateEngine();
System.Console.WriteLine("Search paths:");
ICollection<string> searchPaths = engine.GetSearchPaths();
foreach (string path in searchPaths)
{
System.Console.WriteLine(path);
}
System.Console.WriteLine();
searchPaths.Add("..\\..");
///Trying to add a searchPath for the place with the module I need
searchPaths.Add(@"C:\Program Files (x86)\Microsoft Visual
Studio\Shared\Anaconda3_64\Lib\site-packages");
engine.SetSearchPaths(searchPaths);
var res = engine.CreateScriptSourceFromFile(
@"D:\Python\Projects\TestSpeechRecognition
\TestForNETinPython\TestForNETinPython.py"
);
engine.ImportModule("speech_recognition");
var result = res.Execute();
}
Python代码
import speech_recognition as sr
r = sr.Recognizer()
with sr.Microphone() as source:
print ("Hello: ")
audio = r.listen(source)
try:
print ("I said: " + r.recognize_google(audio))
except sr.UnknownValueError:
print ("Cant't rec")
except sr.RequestError as e:
print ("Can't connect: (0)".format(e))
例外:
未处理的异常:IronPython.Runtime.Exceptions.ImportException:Test.Program 中 IronPython.Hosting.PythonService.ImportModule(ScriptEngine 引擎,字符串名称)的 IronPython.Hosting.Python.ImportModule(ScriptEngine 引擎,字符串模块名称)中没有名为 Speech_recognition 的模块。 D:\Python\Projects\TestSpeechRecognition\Test\Program.cs:line 26 中的 Main(String[] args)
我什至阅读了一些关于创建模块的文献,例如http://www.needfulsoftware.com/IronPython/IronPythonCS2或这个用于 pythonnet 的模块,有点令人毛骨悚然,但我想它可能有用(NoteBook)。
希望有人可以用它来解决问题。
解决方案
推荐阅读
- django - 如何在 django 中连接远程 mongo db
- c# - 使用 switch 语句的 C# 枚举 - 如何使用用户输入
- javascript - scrollHeight 的值与元素的实际高度不同。如何获得实际高度?
- python - 如何通过 Python Selenium BeautifulSoup 从网站中提取证券价格作为文本
- reactjs - 如何从其他组件 React Native 更新主组件状态
- c++ - c++内存管理问题,std::vector nevere释放内存超出范围
- visual-studio - 使用 Visual Studio 工具开发流分析作业 - 如何模拟元数据用户属性?
- android - 将设备更新到 Android Pie 9.0 后视图未加载
- c# - 声明方法返回类型 Task
没有 async 关键字 - c# - 如何使用 C# 在 Microsoft bot 框架中的现有聊天机器人中实现自动完成功能