2011-07-02 7 views
18

Tôi là một noob hoàn chỉnh khi nói đến IronPython. Tôi cần gọi một tập lệnh py từ trang web ASP.NET và có mã sau:Tham khảo cụm từ "nhập khẩu" của Python khi gọi từ IronPython trong C#

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

Phiên bản IronPython tôi đang sử dụng là 2.7.

The 3rd tập tin bên python tôi cần phải gọi có các chỉ thị nhập khẩu sau:

import sys 
from array import * 
from subprocess import * 

Tôi nhận được thông báo lỗi "Không mô-đun tên tiến trình con". Tôi đã sao chép các tập tin subprocess.py từ thư mục cài đặt IronPython Lib, nhưng tôi giả sử tôi cần phải liên kết với nó trong mã C#?

Cảm ơn.

EDIT:

Tôi tìm thấy giải pháp:

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")); 

Nếu ai có bất kỳ ý kiến ​​/ cải tiến xin vui lòng giải thích nhìn thấy như tôi đang ở vùng đất mới với tất cả Python này/IronPython malarky.

+1

Chỉ cần một lưu ý: bạn cũng có thể làm điều này từ bên trong kịch bản Python nếu bạn muốn, bởi [sửa đổi 'sys.path'] (http: // docs.python.org/install/index.html#inst-search-path). Ngoài ra, bạn có thể muốn đăng giải pháp của mình dưới dạng câu trả lời và chấp nhận giải pháp thay vì giữ nó trong chính nội dung câu hỏi. – Cameron

+0

Cảm ơn Cameron. Tôi đã cố gắng để đăng nó như là một câu trả lời nhưng như tôi là một người dùng mới tôi đã không thể trong 8 giờ. Tôi đang gặp sự cố mới hiện đang cố chuyển qua đối số ... – pfeds

Trả lời

2

Một cách thay thế để làm điều này:

dynamic sys = scriptEngine.ImportModule("sys");    
sys.path.append(somePath);