Python脚本中的c#应用程序- IO问题

本文关键字:IO 问题 应用程序 脚本 Python | 更新日期: 2023-09-27 18:06:37

我试图在我的c#应用程序中嵌入著名的speedtest-cli.py (speedtest.net客户端),因此我可以在控制台或文本框中显示输出。

到目前为止,我尝试了以下操作:

class PythonSpeedTest
{    
    private String path = @"c:'pythonSpeedTest.py";
    public void runPython() {
        var py = Python.CreateEngine();
        var scope = py.CreateScope();
        var paths = py.GetSearchPaths();
        paths.Add(@"C:'Program Files (x86)'IronPython 2.7'Lib");
        py.SetSearchPaths(paths);
        MemoryStream ms = new MemoryStream();
        py.Runtime.IO.SetOutput(ms, new StreamWriter(ms));          
        try
        {
           var output = py.ExecuteFile(path, scope);
        }
        catch (Exception ex)
        {             
            Console.WriteLine("Python collapsed" + ex.Message);
        }
        Thread.Sleep(5000);
        var sr = new StreamReader(ms);
        var result = sr.ReadToEnd();
        Console.WriteLine(result);
    }
}

应用程序似乎运行脚本,但是1. 它不会等到完成,而且2. 我无法让它显示python

的任何输出

理想情况下,我需要能够等到python完成测试;捕获和输出结果到控制台或文本框,或者如果我可以捕获所有的输出-那将是非常棒的。

谢谢你的帮助!

Python脚本中的c#应用程序- IO问题

好了!在绞尽脑汁了几天之后,我终于弄明白了。首先,我不需要设置任何流就可以从python获得输出。下面是代码:

class testPython
{
    public void runScript() {
        String path = @"c:'pythonSpeedTest.py";
        var source = System.IO.File.ReadAllText(path);           
        Microsoft.Scripting.Hosting.ScriptEngine py = Python.CreateEngine();
        Microsoft.Scripting.Hosting.ScriptScope scope = py.CreateScope();
        var paths = py.GetSearchPaths();
        paths.Add(@"c:'Program Files (x86)'IronPython 2.7'Lib");
        py.SetSearchPaths(paths);
        try { 
            py.Execute(source);
        }catch (Exception ex){
            Console.WriteLine("Error occured in python script'n"+ex);
            Console.ReadKey();
            return;
        }
    }
}

最重要的是为python引擎设置路径。主要的问题是,我一直在顶棚按下播放按钮运行脚本(对不起,我是一个新手),但在脚本本身,我从来没有简单地调用main()。一旦我添加了它-脚本在我的c#应用程序下很好地执行。获取数据现在很容易了。

希望这能节省一些人的时间!