服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 使用 CliWrap 让C#中的命令行交互(推荐)

使用 CliWrap 让C#中的命令行交互(推荐)

2022-12-12 11:49SpringLeee C#

这篇文章主要介绍了使用 CliWrap 让C#中的命令行交互举重若轻,这是一个在 .NET 平台使用的命令行交互工具库, 通过在C# 中使用 Fluent 的API, 让命令行交互,感兴趣的朋友跟随小编一起看看吧

使用 CliWrap 让C#中的命令行交互(推荐)

在代码中进行命令行交互是一个很常见的场景, 特别是在一些CI CD 自动化流程中, 在这之前我们会使用 System.Diagnostics.Process API, 现在有一个更灵活的工具 CliWarp, 这是一个在 .NET 平台使用的命令行交互工具库, 通过在C# 中使用 Fluent 的API, 让命令行交互举重若轻。

https://github.com/Tyrrrz/CliWrap

主要特性如下:

  • 基于 System.Diagnostics.Process
  • 简单, 流畅的 API 设计
  • 灵活的支持管道模式
  • 安全异步并且支持 cancellation API
  • 跨平台, 可在 Windows、Linux 和 macOS 使用
  • 支持 .NET Standard 2.0+、.NET Core 3.0+、.NET Framework 4.6.1+

和 shell 是类似的,CliWrap 的基本工作单元是一个 command , 首先会执行 Cli.Wrap(...) 创建 command, 参数是可执行文件的路径, 然后通过 fluent api 配置, 最后调用 ExecuteAsync 运行命令,如下:

?
1
2
3
4
5
6
using CliWrap;
using CliWrap.Buffered;
 
var result = await Cli.Wrap("path/to/exe")
     //....
    .ExecuteBufferedAsync();

配置参数

?
1
2
3
4
5
6
7
8
9
10
11
var cmd = Cli.Wrap("git")
    .WithArguments("commit -m \"my commit\"");
 
var cmd = Cli.Wrap("git")
    .WithArguments(new[] {"commit", "-m", "my commit"});
var cmd = Cli.Wrap("git")
    .WithArguments(args => args
        .Add("clone")
        .Add("https://github.com/Tyrrrz/CliWrap")
        .Add("--depth")
        .Add(20));

配置工作目录

默认是当前目录, 你也可以指定文件夹的相对路径和绝对路径

?
1
2
var cmd = Cli.Wrap("git")
    .WithWorkingDirectory("c:/projects/my project/");

配置环境变量

?
1
2
3
4
var cmd = Cli.Wrap("git")
    .WithEnvironmentVariables(env => env
        .Set("GIT_AUTHOR_NAME", "John")
        .Set("GIT_AUTHOR_EMAIL", "john@email.com"));

超时和取消

?
1
2
3
4
5
using var cts = new CancellationTokenSource();
 
cts.CancelAfter(TimeSpan.FromSeconds(10));
 
var result = await Cli.Wrap("path/to/exe").ExecuteAsync(cts.Token);

基于拉取的事件流

除了执行命令之外,CliWrap 还支持事件流模型, 可以订阅相关的事件回调。

 

  • StartedCommandEvent -- 仅接收一次,当命令开始执行时(包含 process ID)
  • StandardOutputCommandEvent -- 每次底层进程向输出流写入新行时收到(包含文本作为字符串)
  • StandardErrorCommandEvent -- 每次底层进程向错误流写入新行时收到(包含文本作为字符串)
  • ExitedCommandEvent -- 仅接收一次,当命令完成执行时(包含 exit code)
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using CliWrap;
using CliWrap.EventStream;
 
var cmd = Cli.Wrap("foo").WithArguments("bar");
 
await foreach (var cmdEvent in cmd.ListenAsync())
{
    switch (cmdEvent)
    {
        case StartedCommandEvent started:
            _output.WriteLine($"Process started; ID: {started.ProcessId}");
            break;
        case StandardOutputCommandEvent stdOut:
            _output.WriteLine($"Out> {stdOut.Text}");
            break;
        case StandardErrorCommandEvent stdErr:
            _output.WriteLine($"Err> {stdErr.Text}");
            break;
        case ExitedCommandEvent exited:
            _output.WriteLine($"Process exited; Code: {exited.ExitCode}");
            break;
    }
}

输出结果如下:

使用 CliWrap 让C#中的命令行交互(推荐)

希望对您有用! https://github.com/Tyrrrz/CliWrap

到此这篇关于使用 CliWrap 让C#中的命令行交互举重若轻的文章就介绍到这了,更多相关C#命令行交互内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/myshowtime/p/15654334.html

延伸 · 阅读

精彩推荐
  • C#C#实现闪动托盘图标效果的方法

    C#实现闪动托盘图标效果的方法

    这篇文章主要介绍了C#实现闪动托盘图标效果的方法,涉及C# ImageList控件的使用技巧,需要的朋友可以参考下...

    冇一朵小尐尒尕尗尛尜5432021-11-24
  • C#C#判断一天、一年已经过了百分之多少的方法

    C#判断一天、一年已经过了百分之多少的方法

    这篇文章主要介绍了C#判断一天、一年已经过了百分之多少的方法,涉及C#针对时间及日期的运算与判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    北风其凉5172021-10-19
  • C#简单实现C#窗体程序判断是否闰年

    简单实现C#窗体程序判断是否闰年

    这篇文章主要介绍了简单实现C#窗体程序判断是否闰年的相关代码,禁止窗体调整大小,关闭窗体前的判断,感兴趣的小伙伴们可以参考一下...

    yongh7018872021-11-30
  • C#浅谈c# 浮点数计算

    浅谈c# 浮点数计算

    本文通过具体的示例给大家演示了下C#中浮点数运算所遇到的问题及解决方法,有需要的小伙伴可以参考下...

    大稳·杨10012022-01-22
  • C#C#中Entity Framework常见报错汇总

    C#中Entity Framework常见报错汇总

    给大家总结了C#中Entity Framework常见报错,以及处理这些错误的方法,希望能够为你提供到帮助。...

    C#教程网8392022-02-13
  • C#C# 命名空间(Namespace)相关知识总结

    C# 命名空间(Namespace)相关知识总结

    这篇文章主要介绍了C# 命名空间(Namespace)的相关知识,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以参考下...

    菜鸟教程11442022-09-16
  • C#使用C#给PDF文档添加注释的实现代码

    使用C#给PDF文档添加注释的实现代码

    本文将实例讲述C#中如何使用免费组件给PDF文档添加文本注释,包括自由文本注释。自由文本注释能允许我们自定义它的风格和外观,非常具有实用价值...

    C#教程网8662021-12-21
  • C#dotnet如何将文件删除到回收站

    dotnet如何将文件删除到回收站

    这篇文章主要给大家介绍了关于dotnet如何将文件删除到回收站的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用dotnet具有一定的参考学...

    lindexi3912022-07-14