【问题标题】:Getting information from scripts/command line calls in C#从 C# 中的脚本/命令行调用获取信息
【发布时间】:2011-01-25 14:38:47
【问题描述】:

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

为了将脚本中的信息传递回 GUI(例如错误报告等),我通常会通过 Process 调用脚本,或者

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

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

谢谢

【问题讨论】:

  • #1(重定向)非常好。
  • 你考虑过 IronPython 还是 IronRuby?

标签: c# python ruby scripting


【解决方案1】:

使用ProcessStartInfo.RedirectStandardInputProcessStartInfo.RedirectStandardOutputProcessStartInfo.RedirectStandardError(以及Process.ExitCode)非​​常好,尤其是当您的脚本严格遵循某种约定时:

  • 警告和错误说明转至stderr
  • 如果出现错误退出,退出代码非零(避免使用特殊值 259 STILL_ACTIVE
  • 如果发生错误提前退出(避免让用户筛选公里错误消息,或者您的 GUI 必须在 MessageBox 中容纳公里错误消息)
  • 所有其他常规输出到stdout(如果适用)

您的用户界面可以轻松:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2015-06-02
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多