2015-11-12 4 views
4

Я пытаюсь выполнить код python в C#. Обычно это нужно делать с помощью IronPython и после установки PTVS (я использую VS 2010).выполнить скрипт python в C#

 var pyEngine = Python.CreateEngine(); 
     var pyScope = pyEngine.CreateScope(); 

     try 
     { 
      pyEngine.ExecuteFile("plot.py", pyScope); 

     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("There is a problem in your Python code: " + ex.Message); 
     } 

Проблема заключается в том, что кажется, что IronPython не распознает некоторые библиотеки как Numpy, pylab или Matplotlib. Я немного посмотрел и нашел, что некоторые люди говорят об Enthought Canopy или Anaconda, которые я установил без исправления проблемы. Что делать, чтобы решить проблему?

+0

Вы, возможно, придется установить несколько путей поиска. – BendEg

ответ

1

Чтобы выполнить скрипт Python, который импортирует некоторые библиотеки, такие как NumPy и pylab, можно сделать так:

 string arg = string.Format(@"C:\Users\ayed\Desktop\IronPythonExamples\RunExternalScript\plot.py"); // Path to the Python code 
    Process p = new Process(); 
    p.StartInfo = new ProcessStartInfo(@"D:\WinPython\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\python.exe", arg); 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.CreateNoWindow = true; // Hide the command line window 
    p.StartInfo.RedirectStandardOutput = false; 
    p.StartInfo.RedirectStandardError = false; 
    Process processChild = Process.Start(p.StartInfo); 
0

Если вы выполняете свой код, IronPython будет искать сценарий только в текущем рабочем каталоге. Вам нужно добавить еще несколько путей поиска. Это является частью какой-то старый код интеграции в моем приложении с помощью IronPython:

var runtimeSetup = Python.CreateRuntimeSetup(null); 
runtimeSetup.DebugMode = false; 
runtimeSetup.Options["Frames"] = true; 
runtimeSetup.Options["FullFrames"] = true; 
var runtime = new ScriptRuntime(runtimeSetup); 

var scriptEngine = runtime.GetEngineByTypeName(typeof(PythonContext).AssemblyQualifiedName); 

// Set default search paths 
ICollection<string> searchPaths = scriptEngine.GetSearchPaths(); 
searchPaths.Add("\\Scripts\\Python"); 
scriptEngine.SetSearchPaths(searchPaths); 

Хитрость заключается в том, чтобы добавить все пути в этой строке кода: scriptEngine.SetSearchPaths(searchPaths);. Если вы добавите каталог, который содержит plot.py здесь, все должно работать.

Надеюсь, это поможет.

+0

Я пробовал это, но странно ничего не было выполнено. – Ala

+0

Не могли бы вы добавить дополнительные сведения о структуре вашего проекта/каталога? Трудно найти какие-то проблемы. – BendEg