首页 > 作文

C#中使用CliWrap让命令行交互举重若轻

更新时间:2023-04-04 08:53:02 阅读: 评论:0

在代码中进行命令行交互是一个很常见的场景, 特别是在一些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 运行命令,如下:

using cliwrap;using cliwrap.buffered;var result = await cli.wrap("path/to/exe")      //....    .executebufferedasync(); 

配置参数

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));  

配置工作目录

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

var cmd = cli.wrap("git")    .withworkingdirectory("c:/projects/my project/");

配置环境变量

var cmd = cli.wrap("git")    .withenvironmentvariables(env => env        .t("git_author_name", "john")        .t("git_author_email", "john@email.com"));

超时和取消

using var cts = new cancellationtokensource(); cts.cancelafter(timespan.fromconds(10));var result = await cli.wrap("path/to/exe").executeasync(cts.token);

基于拉取的事件流

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

startedcommandevent — 仅接收一次,当命令开始执行时(包含 process id)standardoutputcommandevent — 每次底层进程向输出流写入新行时收到(包含文本作为字符串)standarderrorcommandevent — exploded每次底层进程向错误流写入新行时收到(包含文本作为字符串)exitedcommandevent — 仅接收一次,当命令完成执行时(包含 exit code)
using cliwrap;using cl全国211大学排名一览表iwrap.eventstream;var cmd = cli.wrap("foo").witharguments("bar");await foreach (var cmdevent in cmd.listenasync()){    switch (cmdevent)    {        ca startedcommandevent started:            _output.writeline($"process started; id: {sta网络攻击与防御rted.processid}");            break;        ca standardoutputcommandevent stdout:            _output.writeline($"out> {stdout.text}");            break;        ca standarderrorcommandevent stderr:            _output.writeline($"err> {stderr.text}");            break;        ca淘宝彩票 exitedcommandevent exited:            _output.writeline($"process exited; code: {exited.exitcode}");            break;    }}

输出结果如下:

下载地址:https://github.com/tyrrrz/cliw山本美香rap

到此这篇关于c#中使用cliwrap让命令行交互举重若轻的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。

本文发布于:2023-04-04 08:52:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/cdf66044d3e8772d2fddec8690e3daa0.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:C#中使用CliWrap让命令行交互举重若轻.doc

本文 PDF 下载地址:C#中使用CliWrap让命令行交互举重若轻.pdf

相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图