Proc 0.8.1
dotnet add package Proc --version 0.8.1
NuGet\Install-Package Proc -Version 0.8.1
<PackageReference Include="Proc" Version="0.8.1" />
paket add Proc --version 0.8.1
#r "nuget: Proc, 0.8.1"
// 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
加速器。
Proc.Exec()
用于快速单行命令Proc.Start()
用于快速单行命令- 如果需要同时捕获控制台输出并在实时打印这些消息,请使用。
Proc.Start()
还允许您对 StandardIn 编写脚本并响应对话息
- 将
System.Diagnostics.Process
包装为IObservable
ProcessObservable
基于流的包装EventBasedObservableProcess
基于事件的包装
- 内置支持在执行硬
SIGKILL
(Process.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分钟。
结果
具有以下属性
完成
如果程序在超时前完成,则为trueConsoleOut
列表包含了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上自动用Y
在stdin
中响应。
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 已计算。 |
-
.NETFramework 4.6.1
- System.Reactive (>= 5.0.0)
-
.NETStandard 2.0
- System.Reactive (>= 5.0.0)
-
.NETStandard 2.1
- System.Reactive (>= 5.0.0)
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 |