【问题标题】:Is there a way to launch an ironpython interactive window inside a windows forms app有没有办法在 Windows 窗体应用程序中启动 Ironpython 交互式窗口
【发布时间】:2020-01-24 17:22:05
【问题描述】:

当我从 Windows 窗体应用程序运行 python 脚本时,我希望启动一个 Ironpython 交互式窗口。我希望将 python IO 重定向到交互式窗口。因此,脚本可以在运行时接受用户输入。

我在 Windows 窗体 (C#) 中创建了一个托管 Ironpython 2.7.9 的应用程序。我制作了一个简单的 GUI,它允许我使用 OpenFileDialog() 选择一个 python 脚本并使用引擎运行它。到目前为止,我的脚本不需要用户输入,并且从头到尾都是完全自动化的。但是,现在我希望在这些脚本中包含手动步骤,这些步骤需要用户输入“y”或“n”来继续或中止脚本。随着 winforms 应用程序将所有输出打印到控制台,我无法在运行时与 python 脚本交互。理想情况下,当我运行我的脚本并能够从那里与 python 脚本交互时,我希望启动一个 ironpython 交互式窗口。从我能够在线收集的信息来看,似乎我必须在我的计算机程序文件中硬编码 ipy.exe 文件的路径,并以某种方式重定向 python 输入/输出,但这并不理想。我认为必须有一种更简单的方法来做到这一点,但无法弄清楚如何。最终,我只是想为在 C# 中运行的 python 脚本提供用户输入,所以如果有任何其他方法可以满足这一点,我会接受这些想法。任何建议将不胜感激,如果我需要提供更多信息,请告诉我!

我是如何创建引擎的:

public ScriptExecutor()
        {
             InitializeComponent();
             myEngine = Python.CreateEngine();
        }

private Microsoft.Scripting.Hosting.ScriptEngine myEngine;

我使用 ExecuteFile 函数运行一个脚本:

myEngine.ExecuteFile(@"path to file");

预期结果是在单击“运行脚本”按钮时启动 python 交互式窗口。用户可以从这个交互式窗口与脚本进行交互(提供输入/查看输出)

图形用户界面图片:(https://imgur.com/RzzMI4N)

【问题讨论】:

    标签: c# python winforms ironpython


    【解决方案1】:

    经过大量试验,我找到了这个问题的答案。

    我意识到我不应该将引擎用于我正在寻找的功能。相反,创建进程是启动 ironPython 窗口的最佳方式。 我看到的每个教程和问题都说用 ProcessStartInfo.RedirectStandardOutput = true 重定向输出

    但是,如果您希望 ipy 控制台充当独立进程,我们需要允许它接收输入和输出,因此这些值必须保持为 false。 UseShellExecute 和 CreateNoWindow 也必须设置为 false,以便操作系统 shell 不会启动进程并启动新的 ipy 交互式窗口。

    另外,由于 ipy.exe 已安装到 System32 文件夹,我不需要硬编码路径,而只需使用“ipy.exe”

    为了启动 python 交互窗口,我启动了一个进程:

    var script = @"C:\path\to\script.py";
    var psi = new ProcessStartInfo()
    {
        FileName = "ipy.exe",
        Arguments = $"\"{script}\"",
        UseShellExecute = false,
        CreateNoWindow = false
    };
    
    Process python = new Process();
    python.StartInfo = psi;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 2019-09-27
      相关资源
      最近更新 更多