从C#中的脚本/命令行调用获取信息

时间:2010-03-09 20:01:40

标签: c# python ruby scripting

我一直在编写一些使用C#作为Gui的应用程序,但是通过脚本(可能是Python,Ruby等)完成所有工作。

要将脚本中的信息传递回GUI(例如错误报告等),我通常会通过Process和

调用脚本。
  • 重定向输入(StartInfo.RedirectStandardOutput等)并读取
  • 创建GUI监视/读取的临时文件,以找出它需要知道的内容

这些方法似乎都不理想(第二种方法简直太糟糕了)但我没有看到任何其他方法。也许没有,但我认为在开始另一个有类似问题的应用程序之前值得问一下。

由于

1 个答案:

答案 0 :(得分:4)

使用ProcessStartInfo.RedirectStandardInputProcessStartInfo.RedirectStandardOutputProcessStartInfo.RedirectStandardError(以及Process.ExitCode)完全没问题,特别是当您的脚本严格遵循某个惯例时:

  • 警告和错误说明转至stderr
  • 如果错误退出时使用非零退出代码(避免使用特殊值259 STILL_ACTIVE
  • 如果错误提前退出,如果这样做是有意义的(避免让用户筛选千米错误消息,或者您的GUI必须容纳千米错误消息,例如{{1} })
  • 所有其他常规输出转到MessageBox(如果适用)

您的用户界面可以轻松实现:

  • 将脚本stdoutstdout读入单独的缓冲区,直到脚本终止
  • 检查脚本退出代码:
    • 如果退出代码为0且stderr为空,请通知用户stderr
    • 如果退出代码为0且Operation completed successfully非空,请通知用户stderr,允许用户选择性地检查来自Operation completed with warnings缓冲区的警告
    • 如果退出代码非0,则通知用户stderr,允许用户检查Operation has failed with errors缓冲区中的错误