2012-03-10 1 views
1

Я пытаюсь использовать IronPython с monodroid (используя телефон Android 4), чтобы я мог выполнять скрипт python внутри моего проекта. Я основываю свой код на примере здесь: Instantiating a python class in C#Использование IronPython с monodroid - NotImplementedError

Я включил DLL в каталог платформы Android (используя IronPython-2.7.2rc1) и имею скрипт python в каталоге проекта (прямо сейчас тестовый скрипт называется калькулятор из этого примера, связанного)

ниже мой C# код:

using System; 
using Android.App; 
using Android.Content; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.OS; 
using IronPython; 
using IronPython.Hosting; 
using Microsoft.Scripting; 
using Microsoft.Scripting.Hosting; 
namespace PythonTest 
{ 
    [Activity (Label = "PythonTest", MainLauncher = true)] 
    public class Activity1 : Activity 
    { 
     int count = 1; 
     protected override void OnCreate (Bundle bundle) 
     { 
      base.OnCreate (bundle); 

      // Set our view from the "main" layout resource 
      SetContentView (Resource.Layout.Main); 

      ScriptEngine engine = Python.CreateEngine(); 
      ScriptSource source = engine.CreateScriptSourceFromFile("Calculator.py"); 
      ScriptScope scope = engine.CreateScope(); 
      ObjectOperations op = engine.Operations; 
      source.Execute(scope); // class object created 
      object klaz = scope.GetVariable("Calculator"); // get the class object 
      object instance = op.Invoke(klaz); // create the instance 
      object method = op.GetMember(instance, "add"); // get a method 
      int result = (int)op.Invoke(method, 4, 5); // call method and get result (9) 


      var aLabel = new TextView (this); 
      //aLabel.Text = result.ToString(); 

      // Get our button from the layout resource, 
      // and attach an event to it 
      Button button = FindViewById<Button> (Resource.Id.myButton); 

      button.Click += delegate { 
       button.Text = string.Format ("{0} clicks!", count++); }; 
     } 
    } 
} 

Он строит без ошибок. Когда я пытаюсь запустить это на моем телефоне, я получаю эти ошибки и сбой программы (телефон возвращается к исходному экрану)

I/monodroid-gc(2110): environment supports jni NewWeakGlobalRef 

I/MonoDroid(2110): UNHANDLED EXCEPTION: System.NotImplementedException: The requested feature is not implemented. 

I/MonoDroid(2110): at Microsoft.Scripting.PlatformAdaptationLayer.OpenInputFileStream (string) <0x0001c> 

I/MonoDroid(2110): at Microsoft.Scripting.FileStreamContentProvider/PALHolder.GetStream (string) <0x0002b> 

I/MonoDroid(2110): at Microsoft.Scripting.FileStreamContentProvider.GetStream() <0x00023> 

I/MonoDroid(2110): at Microsoft.Scripting.Runtime.LanguageBoundTextContentProvider.GetReader() <0x00027> 

I/MonoDroid(2110): at Microsoft.Scripting.SourceUnit.GetReader() <0x00023> 

I/MonoDroid(2110): at IronPython.Compiler.Parser.CreateParserWorker (Microsoft.Scripting.Runtime.CompilerContext,IronPython.PythonOptions,bool) <0x000bf> 

I/MonoDroid(2110): at IronPython.Compiler.Parser.CreateParser (Microsoft.Scripting.Runtime.CompilerContext,IronPython.PythonOptions) <0x0001f> 

I/MonoDroid(2110): at IronPython.Runtime.PythonContext.ParseAndBindAst (Microsoft.Scripting.Runtime.CompilerContext) <0x0005f> 

I/MonoDroid(2110): at IronPython.Runtime.PythonContext.CompilePythonCode (Microsoft.Scripting.SourceUnit,Microsoft.Scripting.CompilerOptions,Microsoft.Scripting.ErrorSink) <0x0008f> 

I/MonoDroid(2110): at IronPython.Runtime.PythonContext.CompileSourceCode (Microsoft.Scripting.SourceUnit,Microsoft.Scripting.CompilerOptions,Microsoft.Scripting.ErrorSink) <0x0002b> 

I/MonoDroid(2110): at Microsoft.Scripting.SourceUnit.Compile (Microsoft.Scripting.CompilerOptions,Microsoft.Scripting.ErrorSink) <0x0005b> 

I/MonoDroid(2110): at Microsoft.Scripting.SourceUnit.Execute (Microsoft.Scripting.Runtime.Scope,Microsoft.Scripting.ErrorSink) <0x00057> 

I/MonoDroid(2110): at Microsoft.Scripting.SourceUnit.Execute (Microsoft.Scripting.Runtime.Scope) <0x00027> 

I/MonoDroid(2110): at Microsoft.Scripting.Hosting.ScriptSource.Execute (Microsoft.Scripting.Hosting.ScriptScope) <0x00043> 

I/MonoDroid(2110): at PythonTest.Activity1.OnCreate (Android.OS.Bundle) <0x000c3> 

I/MonoDroid(2110): at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) <0x00057> 

I/MonoDroid(2110): at (wrapper dynamic-method) object.5a9608db-a03f-4bd2-831d-6cb21e250354 (intptr,intptr,intptr) <0x00033> 

E/mono (2110): 

E/mono (2110): Unhandled Exception: System.NotImplementedException: The requested feature is not implemented. 

E/mono (2110): at Microsoft.Scripting.PlatformAdaptationLayer.OpenInputFileStream (System.String path) [0x00000] in <filename unknown>:0 

E/mono (2110): at Microsoft.Scripting.FileStreamContentProvider+PALHolder.GetStream (System.String path) [0x00000] in <filename unknown>:0 

E/mono (2110): at Microsoft.Scripting.FileStreamContentProvider.GetStream() [0x00000] in <filename unknown>:0 

E/mono (2110): at Microsoft.Scripting.Runtime.LanguageBoundTextContentProvider.GetReader() [0x00000] in <filename unknown>:0 

E/mono (2110): at Microsoft.Scripting.SourceUnit.GetReader() [0x00000] in <filename unknown>:0 

E/mono (2110): at IronPython.Compiler.Parser.CreateParserWorker (Microsoft.Scripting.Runtime.CompilerContext context, IronPython.PythonOptions options, Boolean verbatim) [0x00000] in <filename unknown>:0 

E/mono (2110): at IronPython.Compiler.Parser.CreateParser (Microsoft.Scripting.Runtime.CompilerContext context, IronPython.PythonOptions options) [0x00000] in <filename unknown>:0 

E/mono (2110): at IronPython.Ru 

Кто-нибудь знает, как это исправить? Спасибо.

ответ

0

Похоже, что исправленная ошибка (PAL для андроида неполна), и похоже, что вы уже открыли проблему (спасибо!).

Поддержка IronPython очень ранняя, поэтому чем больше людей тестируют ее и сообщают о проблемах, тем лучше.