我主要是一名C#程序员,但是留下了一个让我有两个选择的项目:
当然,如果我可以简单地实施选项1,选项2是主要的浪费时间。此外,选项1是一个学习机会,而选项2是一个极端的极客拼写。
所以,我的问题是:有没有办法构建一个C#Process对象来触发.py文件的脚本并在不使用IronPython的情况下捕获脚本的返回值?我没有任何可能使用IronPython的东西,我只需要尽快找到解决方案,所以如果我可以回避I.P.学习曲线,直到我不那么紧急的工作,这将是最佳的。
感谢。
答案 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#系统提供信息。有时最好检查一下你的架构。