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

时间:2010-09-29 16:45:36

标签: c# python

我主要是一名C#程序员,但是留下了一个让我有两个选择的项目:

  1. 调出一个python脚本(保存为.py文件)并处理返回值,或者......
  2. 在C#中重写整个python脚本(总共包含6个.py文件)。
  3. 当然,如果我可以简单地实施选项1,选项2是主要的浪费时间。此外,选项1是一个学习机会,而选项2是一个极端的极客拼写。

    所以,我的问题是:有没有办法构建一个C#Process对象来触发.py文件的脚本并在不使用IronPython的情况下捕获脚本的返回值?我没有任何可能使用IronPython的东西,我只需要尽快找到解决方案,所以如果我可以回避I.P.学习曲线,直到我不那么紧急的工作,这将是最佳的。

    感谢。

3 个答案:

答案 0 :(得分:6)

使用Process.Start运行Python脚本。在ProcessStartInfo对象中,指定:

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

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

  • RedirectStandardOutput = true (如果需要,还需要RedirectStandardError

  • UseShellExecute = false

然后你得到一个Process对象,你可以做一些事情,特别是:

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

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

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

答案 1 :(得分:2)

使用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;

答案 2 :(得分:2)

您可以执行以下操作:

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服务中使用JSON,XML或其他标准为C#系统提供信息。有时最好检查一下你的架构。