Proc 0.8.1

dotnet add package Proc --version 0.8.1                
NuGet\Install-Package Proc -Version 0.8.1                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Proc" Version="0.8.1" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用软件包。
paket add Proc --version 0.8.1                
#r "nuget: Proc, 0.8.1"                
#r 指令可以在 F# Interactive 和 Polyglot Notebooks 中使用。将此复制到交互式工具或脚本的源代码中,以引用软件包。
// Install Proc as a Cake Addin
#addin nuget:?package=Proc&version=0.8.1

// Install Proc as a Cake Tool
#tool nuget:?package=Proc&version=0.8.1                

Proc

一个无依赖的 System.Diagnostics.Process 加速器。

  1. Proc.Exec() 用于快速单行命令
  2. Proc.Start() 用于快速单行命令
    • 如果需要同时捕获控制台输出并在实时打印这些消息,请使用。
    • Proc.Start() 还允许您对 StandardIn 编写脚本并响应对话息
  3. System.Diagnostics.Process 包装为 IObservable
    • ProcessObservable 基于流的包装
    • EventBasedObservableProcess 基于事件的包装
  4. 内置支持在执行硬 SIGKILLProcess.Kill())之前向任何进程发送 SIGINT
    • 必须使用 StartArguments 上的 SendControlCFirst = true 设置

Proc.Exec

执行进程并使用默认的超时时间(4分钟)阻塞。此方法使用与控制台相同的会话,因此会打印二进制控制台输出。如果命令执行失败,则抛出 ProcExecException。有关更多选项,请参阅 ExecArguments

Proc.Exec("ipconfig", "/all");

Proc.Start

使用默认的超时时间(4分钟)启动进程并阻塞

var result = Proc.Start("ipconfig", "/all");

提供自定义超时和一个可以输出到控制台的身影IConsoleOutWriter,在当前行阻塞时

var result = Proc.Start("ipconfig", TimeSpan.FromSeconds(10), new ConsoleOutColorWriter());

可以通过传入StartArguments来传递更多选项,以控制进程应该如何启动。

var args = new StartArguments("ipconfig", "/all")
{
  WorkingDirectory = ..
}
Proc.Start(args, TimeSpan.FromSeconds(10));

静态的Proc.Start,如果没有指定,默认超时时间为4分钟。

结果具有以下属性

  • 完成如果程序在超时前完成,则为true
  • ConsoleOut列表包含了console输出信息作为LineOut实例,其中错误表示是否写入到stderr
  • 过程代码

注意konvehicleOut无论是否提供了IConsoleOutWriter,都会设置为true

可观察过程

所有这一切的核心是一个 IObservable实例。它直接监听输出缓冲区,不等待新行就发射。

要手动创建一个可观察过程,请遵循以下模式

using (var p = new ObservableProcess(args))
{
	p.Subscribe(c => Console.Write(c.Characters));
	p.WaitForCompletion(TimeSpan.FromSeconds(2));
}

可观察项在订阅之前是的,并且不打算重复使用或多次订阅。如果需要共享订阅,请考虑ObjC的 Publish

WanForCompletion ()调用阻塞,所以 P()不会销毁,这会导致启动的进程关闭。

默认关闭方法是 السادس ,这是一个对进程的硬杀(SIGKILL)。

Proc的奇妙之处在于它还支持干扰干扰,允许进程干净地关闭。

var args = new StartArguments("elasticsearch.bat")
{
	SendControlCFirst = true
};

这将在Windows操作系统中首先尝试向运行进程的控制台发送控制+C,然后再回到关闭进程。Linux和OSX对该标志的支持仍在开发中,这就是为什么将其作为可选的功能。

处理byte[]字符可能不是你想要编程的,因此可观察过程还允许以下操作。

using (var p = new ObservableProcess(args))
{
	p.SubscribeLines(c => Console.WriteLine(c.Line));
	p.WaitForCompletion(TimeSpan.FromSeconds(2));
}

不是将byte[]作为在套接字上接收它们一样代理,而是缓冲,仅在水印上发射

在某些情况下,引入自己的单词边界非常有用。

public class MyProcObservable : ObservableProcess
{
	public MyProcObservable(string binary, params string[] arguments) : base(binary, arguments) { }

	public MyProcObservable(StartArguments startArguments) : base(startArguments) { }

	protected override bool BufferBoundary(char[] stdOut, char[] stdErr)
	{
		return base.BufferBoundary(stdOut, stdErr);
	}
}

BufferBoundary内部返回true将产生一个行到SubscribeLine()。这可能是有用的,例如,如果您的进程在没有新行的情况下提示。

继续[Y/N]: <没有新行>

一个更具体的例子是当您在Windows上调用一个bat文件并发送一个SIGINT信号时,它会始终提示。

结束批处理工作(Y/N)?

这不会谒见SubscribeLines并阻塞任何不必要的等待处理。因此,可观察过程会处理此边缘情况,并在.TB上自动用Ystdin中响应。

TITION>可观察过程会在OnCompleted ()之前发出BUFFER中的任何内容。

TITION>基于事件的可观察项

可观察过程的兄弟,使用了输出数据接收错误数据接收,只能发射行

产品 兼容的和额外的计算的target framework版本
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 兼容。
.NET Framework net461 兼容。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包内)
了解更多关于 目标框架.NET Standard

NuGet 包 (2)

显示依赖 Proc 的前 2 个 NuGet 包

下载
Elastic.Elasticsearch.Managed

提供了一个可观察的 ElasticsearchNode 抽象,可用于包装一个 elasticsearch 进程。还提供了一个集群抽象,可以启动一个或多个 ElasticsearchNode

Proc.Fs

围绕 Process 的无依赖反应式抽象,提供便捷的静态方法进行快速的一行代码操作

GitHub 仓库 (3)

显示依赖 Proc 的最顶端 3 个流行的 GitHub 仓库

仓库 星星
elastic/elasticsearch-net
此强类型客户端库允许使用 Elasticsearch。它是由 Elastic 维护和支持的官方客户端。
elastic/apm-agent-dotnet
opensearch-project/opensearch-net
OpenSearch .NET 客户端
版本 下载 最后更新
0.8.1 3,836 1/16/2024
0.8.0 591 1/15/2024
0.7.3 490 1/8/2024
0.7.2 476 1/7/2024
0.7.1 364 1/6/2024
0.7.0 364 1/5/2024
0.6.2 64,331 8/28/2019
0.6.1 200,098 6/20/2019
0.6.0 1,203 6/20/2019
0.5.0 1,138 6/20/2019
0.4.3 5,729 3/29/2019
0.4.2 1,247 2/13/2019
0.4.1 1,309 11/28/2018
0.4.0 1,285 11/28/2018
0.3.8 1,301 11/27/2018
0.3.7 14,947 8/31/2018
0.3.6 1,414 8/27/2018
0.3.5 1,375 8/27/2018
0.3.4 1,372 8/27/2018
0.3.3 1,369 8/23/2018
0.3.2 1,457 8/17/2018
0.3.1 1,404 8/17/2018
0.3.0 1,399 8/17/2018
0.2.1 9,751 5/30/2018
0.2.0 1,479 5/30/2018
0.1.10 1,577 5/7/2018
0.1.9 1,382 5/7/2018
0.1.8 1,573 5/7/2018
0.1.7 1,448 5/7/2018
0.1.6 1,502 5/7/2018
0.1.5 1,491 5/7/2018
0.1.4 1,649 4/18/2018
0.1.3 1,552 2/17/2018
0.1.1 1,594 2/12/2018