2010-09-29 64 views
4

我主要是C#程序员,但已离开与留给我两个选项一个项目:Python&C#:IronPython是绝对必要的吗?

  1. 叫出一个python脚本(保存为.py文件),并处理返回值, OR ...
  2. 在C#中重写整个python脚本(总共涉及6个.py文件)。

当然,方案2是时间的浪费主要,如果我可以简单地实现选项1.此外,选项1是一个学习的机会,而方案2是一个总的怪胎copout。

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

谢谢。

+5

选项3.用python重写整个C#应用程序:) – 2010-09-29 17:10:35

+0

可爱。付这个男人,苏西。 – 2010-09-29 17:44:42

回答

6

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

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

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

  • RedirectStandardOutput = (和RedirectStandardError如果需要的话)

  • UseShellExecute =

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

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

  • 使用Process.ExitCode来读取脚本的返回代码。使用Process.WaitForExit等待脚本完成。

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

你可以这样做:

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#系统。有时候最好查看一下你的架构。

+0

+1审查体系结构。 – 2010-09-29 17:12:06