C# 从C中的脚本/命令行调用获取信息#
我一直在编写一些应用程序,它们使用C#作为Gui,但是在幕后通过脚本(可能是Python、Ruby等)完成所有工作 为了将信息从脚本传递回GUI(例如错误报告等),我通常通过进程调用脚本,或者C# 从C中的脚本/命令行调用获取信息#,c#,python,ruby,scripting,C#,Python,Ruby,Scripting,我一直在编写一些应用程序,它们使用C#作为Gui,但是在幕后通过脚本(可能是Python、Ruby等)完成所有工作 为了将信息从脚本传递回GUI(例如错误报告等),我通常通过进程调用脚本,或者 重定向输入(StartInfo.RedirectStandardOutput等)并读取 创建了GUI监视/读取的临时文件,以了解需要了解的内容 这两种方法似乎都不理想(在我看来,第二种方法简直糟透了),但我看不到任何其他方法可以做到这一点。也许没有,但在我启动另一个有类似问题的应用程序之前,我认为值得
- 重定向输入(StartInfo.RedirectStandardOutput等)并读取
- 创建了GUI监视/读取的临时文件,以了解需要了解的内容
感谢使用
ProcessStartInfo.RedirectStandardInput
,ProcessStartInfo.RedirectStandardOutput
和ProcessStartInfo.RedirectStandardError
(以及Process.ExitCode
)是非常好的,尤其是当您的脚本严格遵循某种约定时:
- 警告和错误说明转到
stderr
- 如果出现错误,则使用非零退出代码退出(避免使用特殊值)
- 如果出现错误,请尽早退出,如果这样做有意义(避免让用户筛选公里错误消息,或者您的GUI必须在
)消息框中容纳公里错误消息
- 所有其他常规输出转到标准输出(如适用)
- 将脚本
和stdout
读入单独的缓冲区,直到脚本终止stderr
- 检查脚本退出代码:
- 如果退出代码为0且
为空,则通知用户stderr
操作已成功完成
- 如果退出代码为0且
非空,则通知用户stderr
,允许用户选择性地从操作已完成,但出现警告
缓冲区检查警告stderr
- 如果退出代码为非0,则通知用户
,允许用户从操作失败并出现错误
缓冲区检查错误stderr
- 如果退出代码为0且