一个跨平台执行外部命令的C#开源库

news2024/11/15 13:35:29

更多开源项目请查看:一个专注推荐.Net开源项目的榜单

对于我们程序员来说,在日常开发项目中,调用外部的命令是非常常见的,比如调用批处理命令、调用其他应用,这里面就涉及到进程的通讯、管理、启动、取消等一些操作,今天给大家推荐一个C#库,就可以满足这些日常的需求,避免重复造轮子。

项目简介

这是基于.NetCore 开发的C#库,一个用于与外部命令行界面交互的库,功能强大、使用简单的库。

技术架构

1、跨平台:这是基于.NetCore开发的系统,可以部署在Docker,Windows,Linux,Mac;

2、支持 .NET Standard 2.0+、.NET Core 3.0+、.NET Framework 4.6.2+。

项目结构

图片

项目特点

1、流畅的配置界面;

2、灵活的管道支持;

3、完全异步且支持取消的API;

4、针对死锁提供解决方案;

5、支持中断信号支持取消。

使用方法

单个命令配置

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(new Dictionary<string, string?>
    {
        ["GIT_AUTHOR_NAME"] = "John",
        ["GIT_AUTHOR_EMAIL"] = "john@email.com"
    });

设置环境变量

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

设置启动子进程的用户的域、名称和密码

var cmd = Cli.Wrap("git")
    .WithCredentials(new Credentials(
        domain: "some_workspace",
        userName: "johndoe",
        password: "securepassword123",
        loadUserProfile: true
    ));

设置启动子进程的用户的域、名称和密码

var cmd = Cli.Wrap("git")
    .WithCredentials(creds => creds
       .SetDomain("some_workspace")
       .SetUserName("johndoe")
       .SetPassword("securepassword123")
       .LoadUserProfile()
    );

设置验证执行结果的策略

var cmd = Cli.Wrap("git")
    .WithValidation(CommandResultValidation.ZeroExitCode);

管道流的使用

await using var input = File.OpenRead("input.txt");
await using var output = File.Create("output.txt");

await Cli.Wrap("foo")
    .WithStandardInputPipe(PipeSource.FromStream(input))
    .WithStandardOutputPipe(PipeTarget.ToStream(output))
    .ExecuteAsync();

Http流

using var httpClient = new HttpClient();
await using var input = await httpClient.GetStreamAsync("https://example.com/image.png");

var cmd = input | Cli.Wrap("foo");
await cmd.ExecuteAsync();

项目地址

https://github.com/Tyrrrz/CliWrap

- End -

推荐阅读

一个简单、功能完整的WMS仓库管理系统

推荐一个.Net分布式微服务开发框架

一款统计摸鱼时长的开源项目

一个基于.Net开发齐全的加密库

用C#自己动手写个操作系统,爽!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Native打包本地镜像,无需通过Graal的maven插件buildtools

简介 在文章《GraalVM和Spring Native尝鲜&#xff0c;一步步让Springboot启动飞起来&#xff0c;66ms完成启动》中&#xff0c;我们介绍了如何使用Spring Native和buildtools插件&#xff0c;打包出本地镜像&#xff0c;也打包成Docker镜像。本文探索一下&#xff0c;如果不通…

一文细说Linux Out Of Memory机制

有时候我们会发现系统中某个进程会突然挂掉&#xff0c;通过查看系统日志发现是由于 OOM机制 导致进程被杀掉。 今天我们就来介绍一下什么是 OOM机制 以及怎么防止进程因为 OOM机制 而被杀掉。 什么是OOM机制 OOM 是 Out Of Memory 的缩写&#xff0c;中文意思是内存不足。而…

【CLYZ集训】人人人数【数学】

思路&#xff1a; 先转转转&#xff0c;把答案变成求每种数的出现次数都小于i的方案书除以Cnm−1mC_{n m - 1}^{m}Cnm−1m​ 对于每个1到m中的数&#xff0c;设每个数的出现次数为xi&#xff0c;则所有x加起来要等于m&#xff0c;且都小于i。 容斥&#xff0c;设其中k个不小于…

目标检测算法——YOLOV8——算法详解

一、主要贡献 主要的创新点&#xff1a;其实到了YOLOV5 基本创新点就不太多了&#xff0c;主要就是大家互相排列组合复用不同的网络模块、损失函数和样本匹配策略。 Yolo v8 主要涉及到&#xff1a;backbone 使用C2f模块&#xff0c;检测头使用了anchor-free Decoupled-head&a…

HTB_Unified_log4j_jndi注入mongodb修改用户hash

文章目录信息收集漏洞复现漏洞验证漏洞利用提权信息收集 nmap -sV -v 这次扫描时间很长&#xff0c;因为默认只扫 1000 个常用端口&#xff0c;如果扫到大端口就会自动扫描全端口&#xff0c;可以自行加速 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (…

Markdown语法-从基础到进阶

时代在进步&#xff0c;越来越多的人和软件开始使用Markdown进行文字编辑&#xff0c;其编辑方便性让很多人爱不释手。但是&#xff0c;不可避免的问题是&#xff0c;在编辑的时候&#xff0c;经常会需要去google,毕竟&#xff0c;习惯了office的可视化操作符号&#xff0c;很多…

在成都Java培训班学习五个多月有用吗?

不知道“有用”的标准是什么&#xff0c;是能入行上岗工作&#xff0c;还是想只通过几个月的培训一跃成为资深开发攻城狮&#xff1f;这里不得不给大家泼瓢冷水&#xff0c;短期培训能让你对口上岗工作就很不错了&#xff1b;想要成为技术大佬&#xff1f;大学里面四年都没能让…

2023年南京Java培训机构排行榜上线,犹豫的小伙伴们看过来!

2022年&#xff0c;JRebel发布了《2022年Java发展趋势和分析》&#xff0c;它通过调研问卷的方式总结的报告&#xff0c;涉及了不同国家、不同岗位、不同公司规模、不同行业&#xff0c;相对来说&#xff0c;该调查报告是有一定参考意义的。数据显示&#xff0c;Java这一语言在…

使用Chisel搭建Systolic Array

最近听到非常多人吹Chisel&#xff0c;为了方便快速做算法实现&#xff0c;就去尝试学了下&#xff0c;发现确实很香&#xff0c;有种相见恨晚的感觉。今天是使用Chisel搭建个脉动阵列&#xff08;Systolic Array, SA&#xff09;[1]&#xff0c;脉动阵列是神经网络中最基础也是…

用递归玩转简单二叉树

前言&#xff1a; 数据结构学到二叉树&#xff0c;就进入到了有难度的部分了&#xff0c;但难度对应着重要性&#xff0c;其重要性也不言而喻了。这节我会介绍用C语言实现递归方法的二叉树的一些重要基本功能&#xff0c;在二叉树中又属于基础知识&#xff0c;有需要的各位必须…

下载CleanMyMac X有什么好处?最新版本有哪些新功能

CleanMyMac X 是一款先进的、集所有功能于一身的实用系统清理工具&#xff0c;它能帮助保持您的Mac保持清洁。只需两个简单的点击&#xff0c;就可以删除无用的文件&#xff0c;以节省您宝贵的磁盘空间。CleanMyMac X可以流畅地与系统性能相结合&#xff0c;清洁不需要的语言、…

EasyCVR新增角色分配分组功能的使用及注意事项

我们在此前的文章中分享过关于EasyCVR分组功能的更新&#xff0c;具体可以查看这篇文章&#xff1a;AI云边端EasyCVR平台新功能解析&#xff1a;支持为角色选择多级分组。今天我们来为大家介绍一下&#xff0c;新功能在配置时需要注意的事项。1、首先我们先简单回顾一下老版本的…

【Js】语法糖之数组解构和拆包表达式

文章目录数组结构拆包表达式来源数组结构 在ES5中&#xff1a;如果计划从数组中提取特定元素&#xff0c;就需使用元素的索引&#xff0c;并将其保存到变量之中。 在ES6中&#xff1a;新增数组解构功能&#xff0c;以简化获取数组中数据的过程。 数组解构采用了数组字面量的…

【SpringCloud复习巩固】Sentinel

sentinel 链接&#xff1a;https://pan.baidu.com/s/1lLJKBSDJNJgW5Lbru6NYrA 提取码&#xff1a;ut3g 目录 一.初识Sentinel 1.1雪崩问题及其解决方案 1.2认识Sentinel 1.3安装Sentinel控制台 1.4微服务整合sentinel 二.限流规则 2.1簇点链路 2.2流控规则 2.3流控效果…

从0~1实现 单体或微服务下 实现订单未支付超时取消功能 方案(2)-rocketmq 延迟队列方案 完整设计和源码

从0~1实现 单体或微服务下 订单未支付超时取消功能 方案&#xff08;1&#xff09;-java delayquene 注册中心(zookeeper/nacos)高可用方案从0~1实现 单体或微服务下 订单未支付超时取消功能 方案&#xff08;2&#xff09;-rocketmq 延迟队列方案 场景说明 我们日常接触的电…

IronPDF for .NET 2023.1 Crack

关于 .NET 的 IronPDF 创建、编辑和导出 PDF 文档。 IronPDF for .NET 允许开发人员在 C#、F# 和 VB.Net for .NET Core 和 .NET Framework 中轻松创建 PDF 文档。您可以选择简单的 HTML&#xff0c;或合并 CSS、图像和 JavaScript。IronPDF 呈现紧跟谷歌浏览器。 IronPDF 功能…

eclipse新手快捷键

1. ctrlshiftr&#xff1a;打开资源 这组Eclipse快捷键可以让你打开你的工作区中任何一个文件&#xff0c;而你只需要按下文件名或mask名中的前几个字母&#xff0c;比如applic*.xml。美中不足的是这组快捷键并非在所有视图下都能用。 2. ctrlo&#xff1a;快速outline 列出…

2023年深圳Java培训机构排名,不看后悔系列!

不忘初心&#xff0c;方得始终。2023&#xff0c;继续战斗&#xff01;想要学习Java的小伙伴们看过来~深圳Java培训机构排名最新排行榜来了&#xff01;靠谱的Java培训机构都在这里&#xff0c;总有一个你喜欢的&#xff0c;总能选出一个合适你的&#xff0c;快拿出小本本记下这…

【MyBatis】搭建MyBatis

1、MyBatis简介 1.1、MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下&#xff0c; iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。iBatis一词来源…

2023年flash水坑攻击源码

1. 背景 在有授权的攻防演练中&#xff0c;很多时候都会用到水坑攻击或者钓鱼&#xff0c;目前flash钓鱼一直都在做&#xff0c;以前的版本中&#xff0c;提示flash版本过低是这样的&#xff1a; 下载界面是这样的&#xff08;下图来源于互联网&#xff09;&#xff1a; 但是目…