首页 > 解决方案 > 在 C# 和 Python 之间传递变量(IronPython?)

问题描述

我正在尝试从 C# 应用程序传递一个变量,该应用程序被用作 API 连接。

本质上,Outsystems 会产生一个信号,C# 应用程序会接收该信号。然后我想将这个(单个整数)变量传递给我的 python 代码(在下面的代码中标记为 msg),以便它可以使用它运行函数。

我研究过,看来 Ironpython 有一个解决方案:

{
    ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(null);
    ScriptRuntime runtime = new ScriptRuntime(setup);
    ScriptEngine engine = Python.GetEngine(runtime);
    ScriptSource source = engine.CreateScriptSourceFromFile("C:\\Scripts\\12\\Testpy\\Testpy\\Testpy.py");
    ScriptScope scope = engine.CreateScope();
    List<String> argv = new List<String>();
    //Do some stuff and fill argv
    argv.Add(msg);
    engine.GetSysModule().SetVariable("argv", argv);
    source.Execute(scope);
}

但是,当它获得 source.Execute(scope) 端时,它似乎什么都不做(没有错误,只是停止执行)。

我想(?)这是因为我的 python 代码还没有设置为接收变量。但是,这是我不确定如何编写的部分。

我 - 不幸的是 - 在将值传递给 python 脚本方面几乎没有经验,但是已经设置了以下简单的示例(即 python 脚本到 python 脚本),它似乎可以正常工作:

pyA

import pyB

pyB.some_func(2)

pyB

def some_func(a):
    print(a)

some_func()

或者,如果有人可以推荐另一种非 Iron Python 方式,那也太棒了!

提前致谢!!非常感激!

标签: c#python.net

解决方案


从此视频中的代码链接:https ://www.youtube.com/watch?v=g1VWGdHRkHs

    var psi = new ProcessStartInfo();
    psi.FileName = @"C:\PythonInstall\python.exe";

    // 2) Provide script and arguments
    var script = @"C:\AllTech\Code\DaysBetweenDates.py";
    var start = "2019-1-1";
    var end = "2019-1-22";

    psi.Arguments = $"\"{script}\" \"{start}\" \"{end}\"";

    // 3) Process configuration
    psi.UseShellExecute = false;
    psi.CreateNoWindow = true;
    psi.RedirectStandardOutput = true;
    psi.RedirectStandardError = true;

    // 4) Execute process and get output
    var errors = "";
    var results = "";

    using(var process = Process.Start(psi))
    {
        errors = process.StandardError.ReadToEnd();
        results = process.StandardOutput.ReadToEnd();
    }

    // 5) Display output
    Console.WriteLine("ERRORS:");
    Console.WriteLine(errors);
    Console.WriteLine();
    Console.WriteLine("Results:");
    Console.WriteLine(results);

推荐阅读