.net core Process 类执行 top -n1 | fgrep 'Cpu(s)' 命令返回空字符串
时间: 2024-03-05 21:54:10 浏览: 23
可能是因为您在使用 `Process` 类执行命令时,没有正确设置 `ProcessStartInfo` 对象的属性。您需要设置 `UseShellExecute` 属性为 `true`,并且将 `RedirectStandardOutput` 属性设置为 `true`,以便能够获取命令的输出。
以下是示例代码:
```
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
ProcessStartInfo psi = new ProcessStartInfo("bash", "-c \"top -n1 | fgrep 'Cpu(s)'\"");
psi.UseShellExecute = true;
psi.RedirectStandardOutput = true;
Process p = Process.Start(psi);
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Console.WriteLine(output);
}
}
```
请注意,这个示例是在 Linux 环境下使用 bash 执行命令的,如果您使用的是 Windows 环境,请将命令修改为对应的 Windows 命令。
相关问题
.net core Process 类执行 top -n1 | fgrep 'Cpu(s)' 返回空值
这可能是由于您的命令中使用了管道符号“|”,而Process类默认情况下不支持管道符号。要支持管道符号,您需要将ProcessStartInfo.RedirectStandardOutput属性设置为true,以便从进程的标准输出流中读取输出。另外,您需要将ProcessStartInfo.UseShellExecute设置为false,以便在创建进程时不使用操作系统的Shell。以下是一个示例代码:
```
var startInfo = new ProcessStartInfo
{
FileName = "top",
Arguments = "-n1",
RedirectStandardOutput = true,
UseShellExecute = false
};
using (var process = new Process())
{
process.StartInfo = startInfo;
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
string cpuUsage = output.Split("\n")
.FirstOrDefault(line => line.Contains("Cpu(s)"))
?.Trim();
}
```
注意,这里的“output”变量将包含整个top命令的输出,因此需要使用字符串操作来提取所需的CPU使用率信息。
.net core在 Linux 环境下使用 bash 执行 top -n1 | fgrep 'Cpu(s)'
在 .NET Core 中,可以通过调用外部程序来执行 bash 命令。可以使用 `Process.Start` 方法来启动一个进程,并执行 top -n1 | fgrep 'Cpu(s)' 命令。示例代码如下:
```csharp
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
// 创建一个 ProcessStartInfo 对象,用于设置进程启动参数
var startInfo = new ProcessStartInfo
{
FileName = "/bin/bash", // 指定要启动的程序(bash)
Arguments = "-c \"top -n1 | fgrep 'Cpu(s)'\"", // 指定要执行的命令
RedirectStandardOutput = true, // 重定向标准输出
UseShellExecute = false // 不使用操作系统外壳程序启动进程
};
// 启动进程并等待执行完成
using (var process = Process.Start(startInfo))
{
process.WaitForExit();
// 读取进程的标准输出
string output = process.StandardOutput.ReadToEnd();
// 输出结果
Console.WriteLine(output);
}
}
}
```
通过这段代码,可以在 Linux 环境下执行 top -n1 | fgrep 'Cpu(s)' 命令,并将结果输出到控制台。