如何使用IronPython从Python文件中获取变量

2024-09-28 01:31:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从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'脚本作用域'


Tags: 文件pyhellomainvarcsprogramsystem
2条回答

你得到的结果暗示着你要寻找什么。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对象,选择所需的对象取决于您打算如何使用该变量

按照这个程序,它应该工作,一定要有文件在正确的地方。我看不到你设置任何变量会这样做,只需遵循以下代码:

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

相关问题 更多 >

    热门问题