1、CliWrap(Cli)下载安装
1)通过dotnet命令安装
dotnet add package CliWrap
2)通过Nuget管理器安装
相关文档:VS(Visual Studio)中Nuget的使用
3)持续集成安装
相关文档:https://ci.appveyor.com/project/Tyrrrz/CliWrap
2、CliWrap(Cli)用法
1)执行命令
var result = await Cli.Wrap("cli.exe")
.SetArguments("Hello world!")
.ExecuteAsync();//如果想阻塞进程,则可以使用Execute()方法
var exitCode = result.ExitCode;
var stdOut = result.StandardOutput;
var stdErr = result.StandardError;
var startTime = result.StartTime;
var exitTime = result.ExitTime;
var runTime = result.RunTime;
2)参数列表编码
可以通过将命令行参数作为列表传递来自动对其进行编码。
var result = await Cli.Wrap("cli.exe")
.SetArguments(new[] {"--option", "some value"})
.ExecuteAsync();
3)操作标准输入
可以将stdin作为字符串或二进制流传递。
var result = await Cli.Wrap("cli.exe")
.SetStandardInput("Hello world from stdin!")
.ExecuteAsync();
4)设置环境变量
可以配置仅对子进程可见的环境变量。
var result = await Cli.Wrap("cli.exe")
.SetEnvironmentVariable("var1", "value1")
.SetEnvironmentVariable("var2", "value2")
.ExecuteAsync();
5)取消执行
可以在任何时候使用取消执行CancellationToken,这也将终止子进程。
using (var cts = new CancellationTokenSource())
{
cts.CancelAfter(TimeSpan.FromSeconds(5)); // e.g. 5秒超时
var result = await Cli.Wrap("cli.exe")
.SetCancellationToken(cts.Token)
.ExecuteAsync();
}
6)stdout和stderr的回调
可以连接自己的回调,这些回调将在stdout或stderr中的每一行上触发。
var result = await Cli.Wrap("cli.exe")
.SetStandardOutputCallback(l => Console.WriteLine($"StdOut> {l}")) // triggered on every line in stdout
.SetStandardErrorCallback(l => Console.WriteLine($"StdErr> {l}")) // triggered on every line in stderr
.ExecuteAsync();
7)错误处理
可以配置非零退出代码或非空stderr是否应该抛出异常。
var result = await Cli.Wrap("cli.exe")
.EnableExitCodeValidation(true) // 在非零退出码上抛出异常(默认打开)
.EnableStandardErrorValidation(true) // 在非零退出码上抛出异常(默认打开)
.ExecuteAsync();