在代码中进行命令行交互是一个很常见的场景, 特别是在一些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 条评论) |