当前位置: 首页 > 编程语言 > C#

在C#中使用CliWrap让命令行交互轻松分享

时间:2023-04-10 19:36:56 C#

代码中的命令行交互是很常见的场景,尤其是在一些CICD自动化流程中。.ProcessAPI,现在有一个更灵活的工具CliWarp,它是.NET平台上使用的命令行交互工具库。通过在C#中使用FluentAPI,可以轻松进行命令行交互。https://github.com/Tyrrrz/CliWrap主要特点如下:基于System.Diagnostics.Process简单、流畅的API设计灵活的支持管道模式安全异步,支持注销API跨平台,可在Windows上使用,Linux和macOS.NETStandard2.0+、.NETCore3.0+、.NETFramework4.6.1+类似于shell。CliWrap的基本工作单元是命令。首先会执行Cli.Wrap(…)创建命令,参数为可执行文件的路径,然后通过fluentapi进行配置,最后调用ExecuteAsync运行命令,如下:usingCliWrap;使用CliWrap.Buffered;varresult=awaitCli.Wrap("path/to/exe")//.....ExecuteBufferedAsync();配置参数varcmd=Cli.Wrap("git").WithArguments("commit-m"mycommit"");varcmd=Cli.Wrap("git").WithArguments(new[]{"commit","-m","mycommit"});varcmd=Cli.Wrap("git").WithArguments(args=>args.Add("clone").Add("https://github.com/Tyrrrz/CliWrap").Add("--depth").添加(20));配置工作目录默认为当前目录,也可以指定文件夹的相对路径和绝对路径varcmd=Cli.Wrap("git").WithWorkingDirectory("c:/projects/myproject/");配置环境变量varcmd=Cli.Wrap("git").WithEnvironmentVariables(env=>env.Set("GIT_AUTHOR_NAME","John").Set("GIT_AUTHOR_EMAIL","john@email.com"));超时和取消使用varcts=newCancellationTokenSource();克拉CancelAfter(TimeSpan.FromSeconds(10));varresult=awaitCli.Wrap("path/to/exe").ExecuteAsync(cts.Token);Pull-basedeventflow除了执行命令,CliWrap还支持事件流模型,可以订阅相关的事件回调StartedCommandEvent—仅在命令开始执行时接收一次(包含进程ID)StandardOutputCommandEvent—每次底层进程将新行写入输出流时接收(包含文本作为字符串)错误流在新行接收(包含文本作为字符串)使用CliWrap.EventStream;varcmd=Cli.Wrap("foo").WithArguments("bar");awaitforeach(varcmdEventincmd.ListenAsync()){switch(cmdEvent){caseStartedCommandEventstarted:_output.WriteLine($"Processstarted;ID:{started.ProcessId}");休息;案例StandardOutputCommandEventstdOut:_output.WriteLine($"Out>{stdOut.Text}");休息;案例StandardErrorCommandEventstdErr:_output.WriteLine($"Err>{stdErr.Text}");休息;caseExitedCommandEventexited:_output.WriteLine($"Processexited;Code:{exited.ExitCode}");休息;}}输出如下:下载地址:https://githubb.com/Tyrrrz/CliWrap关于在C#中使用CliWrap使命令行交互尽可能简单的文章到此结束。希望对大家的学习有所帮助,希望大家多多支持。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: