Referencing Python "import" assemblies when calling from IronPython in C#
Asked Answered
K

1

19

I'm a complete noob when it comes to IronPython. I need to call a py script from an ASP.NET website, and have the following code:

var ipy = IronPython.Hosting.Python.CreateRuntime();
dynamic test = ipy.UseFile(Server.MapPath(@"~\python\test.py"));
test.DoWork();

The version of IronPython I'm using is 2.7.

The 3rd party python file I need to call has the following import directives:

import sys
from array import *
from subprocess import *

I'm receiving the error "No module named subprocess". I've copied the subprocess.py file from the IronPython installation Lib directory, but I assume I need to link to it in the C# code?

Thanks.

EDIT:

I found the solution:

ScriptEngine scriptEngine = Python.CreateEngine();

var sp = scriptEngine.GetSearchPaths();
sp.Add(Server.MapPath(@"~\python\lib"));
scriptEngine.SetSearchPaths(sp);

var scope = scriptEngine.Runtime.ExecuteFile(Server.MapPath(@"~\python\test.py"));

If anyone has any comments/improvements please feel free to elaborate seeing as I'm in new ground with all this Python/IronPython malarky.

Kinard answered 2/7, 2011 at 14:4 Comment(2)
Just a note: you could also do this from within the Python script if you wanted to, by modifying sys.path. Also, you may want to post your solution as an answer and accept it, instead of keeping it in the question body itself.Loya
Thanks Cameron. I tried to post it as an answer but as I'm a new user I was unable to for 8 hours. I'm having a new issue now attempting to pass in arguments...Kinard
V
2

An alternate way of doing this:

dynamic sys = scriptEngine.ImportModule("sys");            
sys.path.append(somePath);
Vitebsk answered 10/11, 2011 at 12:30 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.