Python&;C#:IronPython是绝对必要的吗?

Python&;C#:IronPython是绝对必要的吗?,c#,python,C#,Python,我基本上是一名C#程序员,但留下的项目让我有两个选择: 调用python脚本(另存为.py文件)并处理返回值,或 用C#重写整个python脚本(总共涉及6.py文件) 当然,如果我可以简单地实现选项1,那么选项2是一个很大的时间浪费。此外,选项1是一个学习机会,而选项2是一个完全的极客合作 因此,我的问题是:有没有一种方法可以构建一个C#进程对象来触发.py文件的脚本并捕获脚本的返回值而不使用IronPython?我不反对使用IronPython,我只需要尽快找到一个解决方案,所以如果我能避开

我基本上是一名C#程序员,但留下的项目让我有两个选择:

  • 调用python脚本(另存为.py文件)并处理返回值,或
  • 用C#重写整个python脚本(总共涉及6.py文件)
  • 当然,如果我可以简单地实现选项1,那么选项2是一个很大的时间浪费。此外,选项1是一个学习机会,而选项2是一个完全的极客合作

    因此,我的问题是:有没有一种方法可以构建一个C#进程对象来触发.py文件的脚本并捕获脚本的返回值而不使用IronPython?我不反对使用IronPython,我只需要尽快找到一个解决方案,所以如果我能避开I.P.学习曲线,直到我有不那么紧迫的工作要做,那将是最佳的


    谢谢。

    使用System.Diagnostics.Process运行Python脚本,然后在脚本完成后使用Process.ExitCode检索脚本的返回值:

    // Start the script
    var process = System.Diagnostics.Process.Start("python MyScript.py");
    
    // Wait for the script to run
    process.WaitForExit();
    
    int returnVal = process.ExitCode;
    
    用于运行Python脚本。在
    ProcessStartInfo
    对象中,指定:

    • FileName
      =Python脚本的路径和文件名

    • 参数
      =要传递给脚本的任何参数

    • RedirectStandardOutput
      =true(如果需要,
      RedirectStandardError

    • UseShellExecute
      =false

    然后得到一个
    进程
    对象,您可以在该对象上执行一些操作,特别是:

    • 使用
      Process.StandardOutput
      读取Python脚本的输出。例如,您可以对此调用
      ReadToEnd()
      ,以获取包含整个输出的单个字符串,或者在循环中调用
      ReadLine()

    • 使用
      Process.ExitCode
      读取脚本的返回代码

    • 使用
      Process.WaitForExit
      等待脚本完成


    您可以执行以下操作:

    Process py = new Process();
    py.StartInfo.FileName = "python.exe";
    py.StartInfo.Arguments = "c:\\python\\script.py";
    py.StartInfo.UseShellExecute = false;
    py.StartInfo.CreateNoWindow = true;
    py.StartInfo.RedirectStandardOutput = true;
    py.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
    py.Start();
    py.BeginOutputReadLine();
    py.WaitForExit();
    py.Close();
    
    但是,我必须说,你可以有多个系统,基于不同的语言,因为他们可以理解每一个说什么。我的意思是,有一些标准可以被认为是整个事情的粘合剂。例如,python系统可以在python内置的Web服务中为C#系统提供JSON、XML或其他标准。有时最好回顾一下您的体系结构。

    选项3。用python重写整个C#应用程序:)