2013-04-01 24 views
5

Python.Net kaynağında bir haftalığına çalıştım ancak Python.Net kaynağının çeşitli yerleştirme testleri olmasına rağmen Python.Net'i gömülü olarak kullanmak için örnek kod bulamıyorum. Önceki e-posta listesinden (Python.Net) birçok ileti dizisini aradım, sonuçlar tutarlı değil ve clueless.Python.Net'ten python komutunu nasıl çağırmanız gerektiğine dair fikrinizi paylaşır mısınız?

Yapmaya çalıştığım şey, Python.Net aracılığıyla python komut isteminden 'print 2 + 3' gibi python komutunu çalıştırdıktan sonra C# kodundan C# kodundan sonuç elde etmek (PyObject po), çünkü IronPython'ın Şu anda kullandığım modül.

nPython.exe aracından çalıştırdığımda, beklediğim gibi 5 yazdırır. Ancak, bu kodu C# gömülü yoldan çalıştırdığımda. her zaman 'boş' döndürür. İcra sonucunu nasıl alabileceğime dair bazı fikirler verir misiniz?

Spark, Spark.

Ortamlar: 1. Windows 2008 R2, .Net 4.0. VS2012 2. nPython.exe de Python27, UCS2 ile Derleyen Python.Net çalışmıyor 'baskısını 2 + 3' O PythonEngine.RunString gibi görünüyor

using NUnit.Framework; 
using Python.Runtime; 

namespace CommonTest 
{ 
    [TestFixture] 
    public class PythonTests 
    { 
     public PythonTests() 
     { 

     } 
     [Test] 
     public void CommonPythonTests() 
     { 

      PythonEngine.Initialize(); 

      IntPtr gs = PythonEngine.AcquireLock(); 
      PyObject po = PythonEngine.RunString("print 2+3"); 
      PythonEngine.ReleaseLock(gs); 

      PythonEngine.Shutdown(); 
     } 
    } 
} 

cevap

6

() çalıştırmak için çalışıyor. Bunun yerine, PythonEngine.RunSimpleString() iyi çalışıyor.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Diagnostics; 
using System.Reflection; 
using Python.Runtime; 

namespace npythontest 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      string external_file = "c:\\\\temp\\\\a.py"; 

      Console.WriteLine("Hello World!"); 
      PythonEngine.Initialize(); 

      IntPtr pythonLock = PythonEngine.AcquireLock(); 

      var mod = Python.Runtime.PythonEngine.ImportModule("os.path"); 
      var ret = mod.InvokeMethod("join", new Python.Runtime.PyString("my"), new Python.Runtime.PyString("path")); 
      Console.WriteLine(mod); 
      Console.WriteLine(ret); 
      PythonEngine.RunSimpleString("import os.path\n"); 
      PythonEngine.RunSimpleString("p = os.path.join(\"other\",\"path\")\n"); 
      PythonEngine.RunSimpleString("print p\n"); 
      PythonEngine.RunSimpleString("print 3+2"); 
      PythonEngine.RunSimpleString("execfile('" + external_file + "')"); 

      PythonEngine.ReleaseLock(pythonLock); 
      PythonEngine.Shutdown(); 
     } 
    } 
} 
+3

Bu arada, bir konsol uygulaması olarak çalıştırdığınızda, iyi çalışıyor ve çıktıyı doğru olarak görüntüler, ancak bir yöntemden kodun altında çalıştığımda çıkarım. Yeniden yönlendirme ile çıktı almak için herhangi bir öneriniz var mı? – spark

+1

Gönderinizden bu yana bir süredir var, ama aynı şeyi yapmaya çalışıyorum ve sonunda neyle gittiğini hatırlayıp hatırlamadığınızı merak ediyorum. Buradaki fikir, C# uygulamasından Python komutlarının sonucunu yeniden yönlendirmektir. – Spry

İlgili konular