首页 > 作文

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

更新时间:2023-04-04 01:20:06 阅读: 评论:0

在代码中进行命令行交互是一个很常见的场景, 特别是在一些ci cd 自动化流程中, 在这之前我们会使用 system.diagnostics.process api, 现在有一个更灵活的工具 cliwarp, 这是一个在 .net 平台使用的命令行交互工具库, 通过在c# 中使用 fluent 的api, 让命令行交互举重若轻。

https://github.com/tyrrrz/cliwrap

主要特性如下:

基于 systav女星排名em.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", "450字的作文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 &西安政法学院#8212; 每次底层进程向输出流写入新行时收到(包含文本作为字符串)standarderrorcommandevent — 每次底层进程向错误流写入新行时收到(包含文本作为字符串)exitedcommandevent — 仅接收一次,当命令完成执行时(包含 exit code)
using cliwrap;using cliwrap.eventstream;var cmd = cli.wrap("foo").witharguments("bar");await foreach (va烛光晚餐r cmdevent in cmd.listenasync()){    switch (cmdevent)    {        ca startedcommandevent started:            _output.writeline($"process started; 创新作文题目id: {started.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/cliwrap

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

本文发布于:2023-04-04 01:20:02,感谢您对本站的认可!

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

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

本文word下载地址:使用 CliWrap 让C#中的命令行交互(推荐).doc

本文 PDF 下载地址:使用 CliWrap 让C#中的命令行交互(推荐).pdf

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