【问题标题】:How to get a variable from Python file using IronPython如何使用 IronPython 从 Python 文件中获取变量
【发布时间】:2019-12-28 07:36:15
【问题描述】:

我想从我的 Python 文件中获取一个变量并将其写入控制台 这是我尝试过的:

main.py

myVar = "Hello There"

program.cs

using System;
using IronPython.Hosting;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var py = Python.CreateEngine();

            var pythonVariable = py.ExecuteFile("main.py");
            Console.WriteLine(pythonVariable);

            Console.Read();

        }
    }
}

我希望输出是“Hello There”,但我得到了这个:“Microsoft.Scripting.Hosting.ScriptScope”

【问题讨论】:

  • 您应该在main.py 中打印变量吗?该脚本没有输出

标签: c# python ironpython


【解决方案1】:

你得到的输出暗示你必须寻找什么。 ExecuteFile 返回一个 ScriptScope,其中包含在执行的 Python 代码中定义的所有变量。

要从中检索特定变量,您需要使用GetVariableTryGetVariable(如果文件中可能不存在该变量),例如:

using System;
using IronPython.Hosting;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var py = Python.CreateEngine();

            var pythonVariable = py.ExecuteFile("main.py").GetVariable<string>("myVar");
            Console.WriteLine(pythonVariable);

            Console.Read();

        }
    }
}

请注意,我使用GetVariable 的通用版本立即将其转换为string。非泛型版本返回一个dynamic 对象,选择你需要哪个取决于你打算如何使用该变量

【讨论】:

    【解决方案2】:

    按照这个程序,它应该可以工作,一定要把文件放在正确的地方。我没有看到您设置任何变量 这样做并按照代码进行操作:

    var engine = Python.CreateEngine(); // Extract Python language engine from their grasp
                var source = engine.CreateScriptSourceFromFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "myPython.py"));
                var scope = engine.CreateScope();
                source.Execute(scope);
                var theVar = scope.GetVariable("myVar");
    
                Console.WriteLine(theVar);
                Console.ReadKey();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2012-02-06
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2022-01-15
      • 2013-09-07
      相关资源
      最近更新 更多