Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C中的脚本/命令行调用获取信息#_C#_Python_Ruby_Scripting - Fatal编程技术网

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

C# 从C中的脚本/命令行调用获取信息#,c#,python,ruby,scripting,C#,Python,Ruby,Scripting,我一直在编写一些应用程序,它们使用C#作为Gui,但是在幕后通过脚本(可能是Python、Ruby等)完成所有工作 为了将信息从脚本传递回GUI(例如错误报告等),我通常通过进程调用脚本,或者 重定向输入(StartInfo.RedirectStandardOutput等)并读取 创建了GUI监视/读取的临时文件,以了解需要了解的内容 这两种方法似乎都不理想(在我看来,第二种方法简直糟透了),但我看不到任何其他方法可以做到这一点。也许没有,但在我启动另一个有类似问题的应用程序之前,我认为值得

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

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

  • 重定向输入(StartInfo.RedirectStandardOutput等)并读取
  • 创建了GUI监视/读取的临时文件,以了解需要了解的内容
这两种方法似乎都不理想(在我看来,第二种方法简直糟透了),但我看不到任何其他方法可以做到这一点。也许没有,但在我启动另一个有类似问题的应用程序之前,我认为值得一问


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

  • 警告和错误说明转到
    stderr
  • 如果出现错误,则使用非零退出代码退出(避免使用特殊值)
  • 如果出现错误,请尽早退出,如果这样做有意义(避免让用户筛选公里错误消息,或者您的GUI必须在
    消息框中容纳公里错误消息
  • 所有其他常规输出转到标准输出(如适用)
然后,您的UI可以轻松地:

  • 将脚本
    stdout
    stderr
    读入单独的缓冲区,直到脚本终止
  • 检查脚本退出代码:
    • 如果退出代码为0且
      stderr
      为空,则通知用户
      操作已成功完成
    • 如果退出代码为0且
      stderr
      非空,则通知用户
      操作已完成,但出现警告
      ,允许用户选择性地从
      stderr
      缓冲区检查警告
    • 如果退出代码为非0,则通知用户
      操作失败并出现错误
      ,允许用户从
      stderr
      缓冲区检查错误

#1(重定向)非常好。您考虑过IronPython或IronRuby吗?