8

私は 1 週間 Python.Net で遊んでいますが、Python.Net のソースにはいくつかの埋め込みテストがありますが、Python.Net を埋め込みで使用するためのサンプル コードが見つかりません。以前のメーリング リスト (Python.Net) から多くのスレッドを検索しましたが、結果は一貫しておらず、わかりません。

私がやろうとしているのは、IronPython が現在使用しているモジュールとの互換性がないため、Python.Net を介して Python プロンプトから「print 2+3」などの Python コマンドを実行した後、C# コードから結果 (PyObject po) を取得することです。使用しています。

nPython.exe から実行すると、予想どおり 5 が出力されます。ただし、このコードを C# の組み込み方法から実行すると、. 常に「null」を返します。実行結果を取得する方法を教えてください。

ありがとう、スパーク。

環境: 1. Windows 2008 R2、.Net 4.0。VS2012 で Python27、UCS2 を使用してコンパイルされた Python.Net 2. nPython.exe は正常に動作し、「print 2+3」を実行します

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();
        }
    }
}
4

1 に答える 1

8

PythonEngine.RunString() が機能しないようです。代わりに、 PythonEngine.RunSimpleString() は正常に動作します。

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();
        }
    }
}
于 2013-04-05T18:26:19.260 に答える