C# 如何正确运行&x201C;顶部”;通过SSH执行命令?
我使用这个库连接到我运行的Linux命令,但是 有些命令有问题 例如,我在运行以下命令时遇到问题: top和top-n1 错误:未设置术语环境变量C# 如何正确运行&x201C;顶部”;通过SSH执行命令?,c#,ssh,command,C#,Ssh,Command,我使用这个库连接到我运行的Linux命令,但是 有些命令有问题 例如,我在运行以下命令时遇到问题: top和top-n1 错误:未设置术语环境变量 private void按钮2\u单击(对象发送者,事件参数e) { Renci.SshNet.SshClient-SshClient=新Renci.SshNet.SshClient(“192.168.150.128”,“reza”,“1”); sshClient.Connect(); var command=sshClient.RunCommand
private void按钮2\u单击(对象发送者,事件参数e)
{
Renci.SshNet.SshClient-SshClient=新Renci.SshNet.SshClient(“192.168.150.128”,“reza”,“1”);
sshClient.Connect();
var command=sshClient.RunCommand(“top”);
var line=command.Result.Split('\n');
列表服务器状态=新列表();
对于(int i=3;i
您遇到的问题与服务器不知道输入应重定向到哪个术语有关
请看一看
在获得任何输出之前,您需要设置术语变量。您遇到的问题与服务器不知道输入应重定向到哪个术语有关 请看一看
在获得任何输出之前,您需要设置术语变量。使用此选项:
top-n1b
使用命令行参数b
在“批处理”模式下启动top,这可能有助于发送
从顶部输出到其他程序或文件。在这个
模式下,top将不接受输入并在迭代之前运行
使用“-n”命令行选项设置的限制或直到
杀了
更多帮助信息,请参见man top
顺便说一句--
很好的代码示例,这是我对您的代码的版本参考:)
使用了MoreLINQ
,仍然需要添加一些代码以返回结果
static void ParseTop(string contentOfOutput)
{
var line = contentOfOutput.Split('\n');
//parse uptime/user/load.avg
var lineUud = line[0].Substring("top -".Length);
var wordsUud = lineUud.Split(new[] { "up", "load average:", ",", " " }, StringSplitOptions.RemoveEmptyEntries);
//00:00:00 up 0 days, 17:51, 0 users, load average: 0.00, 0.01, 0.05
//^0 ^1 ^2 ^3 ^4 ^5(unused) ^6 ^7 ^8
//00:00:00 up 0 min, 1 user, load average: 0.00, 0.01, 0.05
//^0 ^1 ^2 ^3 ^4(unused) ^5 ^6 ^7
var time = TimeSpan.Parse(wordsUud[0]);
if (wordsUud[2] == "days")
{
var uptime = TimeSpan.Parse(wordsUud[1] + "." + wordsUud[3] + ":00");
var users = int.Parse(wordsUud[4]);
var la1Min = float.Parse(wordsUud[5]);
var la5Min = float.Parse(wordsUud[6]);
var la15Min = float.Parse(wordsUud[7]);
}
else
{
var uptime = TimeSpan.Parse("00:" + wordsUud[1] + ":00");
var users = int.Parse(wordsUud[3]);
var la1Min = float.Parse(wordsUud[4]);
var la5Min = float.Parse(wordsUud[5]);
var la15Min = float.Parse(wordsUud[6]);
}
//parse tasks
var lineTasks = line[1].Substring("Tasks:".Length);
var wordTasks = lineTasks.Split(new[] { "total", "running", "sleeping", "stopped", "zombie", ",", " " }, StringSplitOptions.RemoveEmptyEntries);
//70 total, 1 running, 69 sleeping, 0 stopped, 0 zombie
//^0 ^1 ^2 ^3 ^4
var totalTasks = int.Parse(wordTasks[0]);
var runningTasks = int.Parse(wordTasks[1]);
var sleepingTasks = int.Parse(wordTasks[2]);
var stoppedTasks = int.Parse(wordTasks[3]);
var zombieTasks = int.Parse(wordTasks[4]);
//parse cpu
var cpus = new Dictionary<string, Dictionary<string, float>>();
var cpuLineIndex = 2;
string cpuLine;
while ((cpuLine = line[cpuLineIndex]).StartsWith("%Cpu"))
{
var wordCpu = cpuLine.Split(new[] { "%Cpu", ":", ",", " " }, StringSplitOptions.RemoveEmptyEntries);
//%Cpu(s): 0.2 us, 0.6 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
//%Cpu1 : 0.2 us, 0.6 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
// ^0 ^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^10 ^11 ^12 ^13 ^14 ^15 ^16
var cpu = new Dictionary<string, float>();
foreach (var entry in wordCpu.Skip(1).Batch(2).Where(p => p.Count() == 2).Select(p => p.ToArray()))
{
cpu[entry[1]] = float.Parse(entry[0]);
}
cpus[wordCpu[0]] = cpu;
cpuLineIndex++;
}
//parse memory/swap
var memories = new Dictionary<string, Dictionary<string, int>>();
var memLineIndex = cpuLineIndex;
string memLine;
while ((memLine = line[memLineIndex]).StartsWith("KiB"))
{
var wordMem = memLine.Split(new[] { "KiB", ":", ",", " " }, StringSplitOptions.RemoveEmptyEntries);
//KiB Mem: 993780 total, 968936 used, 24844 free, 418236 buffers
//KiB Swap: 524284 total, 0 used, 524284 free, 506312 cached
// ^0 ^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8
var mem = new Dictionary<string, int>();
foreach (var entry in wordMem.Skip(1).Batch(2).Where(p => p.Count() == 2).Select(p => p.ToArray()))
{
mem[entry[1]] = int.Parse(entry[0]);
}
memories[wordMem[0]] = mem;
memLineIndex++;
}
//parse process
var process = new List<Dictionary<string, string>>();
var lineNumOfBlank = Array.IndexOf(line, "");
var headers = line[lineNumOfBlank + 1].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (var i = lineNumOfBlank + 2; i < line.Length - 1; i++)
{
var li = line[i];
var strings = li.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var dic = new Dictionary<string, string>();
for (var j = 0; j < headers.Length; j++)
{
dic[headers[j]] = strings[j];
}
if (strings.Length > headers.Length) //process name has space?
{
for (var j = headers.Length; j < strings.Length; j++)
{
dic[headers[headers.Length - 1]] += " " + strings[j];
}
}
process.Add(dic);
}
}
static void ParseTop(输出的字符串内容)
{
var line=contentOfOutput.Split('\n');
//解析正常运行时间/user/load.avg
var lineUud=line[0]。子字符串(“top-”.Length);
var wordsUud=lineUud.Split(新[]{“向上”,“负载平均:”,“,”,“},StringSplitOptions.RemoveEmptyEntries);
//00:00:00最多0天,17:51,0个用户,平均负载:0.00,0.01,0.05
//^0^1^2^3^4^5(未使用的)^6^7^8
//00:00:00向上0分钟,1个用户,平均负载:0.00、0.01、0.05
//^0^1^2^3^4(未使用)^5^6^7
var time=TimeSpan.Parse(wordsUud[0]);
如果(wordsUud[2]=“天”)
{
var-uptime=TimeSpan.Parse(wordsUud[1]+“+wordsUud[3]+”:00);
var users=int.Parse(wordsUud[4]);
var la1Min=float.Parse(wordsUud[5]);
var la5Min=float.Parse(wordsUud[6]);
var la15Min=float.Parse(wordsUud[7]);
}
其他的
{
var-uptime=TimeSpan.Parse(“00:+wordsUud[1]+”:00”);
var users=int.Parse(wordsUud[3]);
var la1Min=float.Parse(wordsUud[4]);
var la5Min=float.Parse(wordsUud[5]);
var la15Min=float.Parse(wordsUud[6]);
}
//分析任务
var lineTasks=line[1]。子字符串(“Tasks:.Length”);
var-wordTasks=lineTasks.Split(新[]{“总计”、“运行”、“睡眠”、“停止”、“僵尸”、“、”、“},StringSplitOptions.RemoveEmptyEntries);
//总共70个,1个运行,69个睡眠,0个停止,0个僵尸
//^0 ^1 ^2 ^3 ^4
var totalTasks=int.Parse(wordTasks[0]);
var runningTasks=int.Parse(wordTasks[1]);
var sleepingTasks=int.Parse(wordTasks[2]);
var stoppedTasks=int.Parse(wordTasks[3]);
var zombieTasks=int.Parse(wordTasks[4]);
//解析cpu
var cpus=newdictionary();
var cpuLineIndex=2;
串珠蛋白;
while((cpuLine=line[cpuLineIndex]).StartsWith(“%Cpu”))
{
var wordCpu=cpuLine.Split(新[]{“%Cpu”,“:”,“,”,“},StringSplitOptions.RemoveEmptyEntries);
//%Cpu:0.2us、0.6sy、0.0ni、99.1id、0.0wa、0.0hi、0.1si、0.0st
//%Cpu1:0.2us,0.6sy,0.0ni,99.1id,0.0
static void ParseTop(string contentOfOutput)
{
var line = contentOfOutput.Split('\n');
//parse uptime/user/load.avg
var lineUud = line[0].Substring("top -".Length);
var wordsUud = lineUud.Split(new[] { "up", "load average:", ",", " " }, StringSplitOptions.RemoveEmptyEntries);
//00:00:00 up 0 days, 17:51, 0 users, load average: 0.00, 0.01, 0.05
//^0 ^1 ^2 ^3 ^4 ^5(unused) ^6 ^7 ^8
//00:00:00 up 0 min, 1 user, load average: 0.00, 0.01, 0.05
//^0 ^1 ^2 ^3 ^4(unused) ^5 ^6 ^7
var time = TimeSpan.Parse(wordsUud[0]);
if (wordsUud[2] == "days")
{
var uptime = TimeSpan.Parse(wordsUud[1] + "." + wordsUud[3] + ":00");
var users = int.Parse(wordsUud[4]);
var la1Min = float.Parse(wordsUud[5]);
var la5Min = float.Parse(wordsUud[6]);
var la15Min = float.Parse(wordsUud[7]);
}
else
{
var uptime = TimeSpan.Parse("00:" + wordsUud[1] + ":00");
var users = int.Parse(wordsUud[3]);
var la1Min = float.Parse(wordsUud[4]);
var la5Min = float.Parse(wordsUud[5]);
var la15Min = float.Parse(wordsUud[6]);
}
//parse tasks
var lineTasks = line[1].Substring("Tasks:".Length);
var wordTasks = lineTasks.Split(new[] { "total", "running", "sleeping", "stopped", "zombie", ",", " " }, StringSplitOptions.RemoveEmptyEntries);
//70 total, 1 running, 69 sleeping, 0 stopped, 0 zombie
//^0 ^1 ^2 ^3 ^4
var totalTasks = int.Parse(wordTasks[0]);
var runningTasks = int.Parse(wordTasks[1]);
var sleepingTasks = int.Parse(wordTasks[2]);
var stoppedTasks = int.Parse(wordTasks[3]);
var zombieTasks = int.Parse(wordTasks[4]);
//parse cpu
var cpus = new Dictionary<string, Dictionary<string, float>>();
var cpuLineIndex = 2;
string cpuLine;
while ((cpuLine = line[cpuLineIndex]).StartsWith("%Cpu"))
{
var wordCpu = cpuLine.Split(new[] { "%Cpu", ":", ",", " " }, StringSplitOptions.RemoveEmptyEntries);
//%Cpu(s): 0.2 us, 0.6 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
//%Cpu1 : 0.2 us, 0.6 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
// ^0 ^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^10 ^11 ^12 ^13 ^14 ^15 ^16
var cpu = new Dictionary<string, float>();
foreach (var entry in wordCpu.Skip(1).Batch(2).Where(p => p.Count() == 2).Select(p => p.ToArray()))
{
cpu[entry[1]] = float.Parse(entry[0]);
}
cpus[wordCpu[0]] = cpu;
cpuLineIndex++;
}
//parse memory/swap
var memories = new Dictionary<string, Dictionary<string, int>>();
var memLineIndex = cpuLineIndex;
string memLine;
while ((memLine = line[memLineIndex]).StartsWith("KiB"))
{
var wordMem = memLine.Split(new[] { "KiB", ":", ",", " " }, StringSplitOptions.RemoveEmptyEntries);
//KiB Mem: 993780 total, 968936 used, 24844 free, 418236 buffers
//KiB Swap: 524284 total, 0 used, 524284 free, 506312 cached
// ^0 ^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8
var mem = new Dictionary<string, int>();
foreach (var entry in wordMem.Skip(1).Batch(2).Where(p => p.Count() == 2).Select(p => p.ToArray()))
{
mem[entry[1]] = int.Parse(entry[0]);
}
memories[wordMem[0]] = mem;
memLineIndex++;
}
//parse process
var process = new List<Dictionary<string, string>>();
var lineNumOfBlank = Array.IndexOf(line, "");
var headers = line[lineNumOfBlank + 1].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (var i = lineNumOfBlank + 2; i < line.Length - 1; i++)
{
var li = line[i];
var strings = li.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var dic = new Dictionary<string, string>();
for (var j = 0; j < headers.Length; j++)
{
dic[headers[j]] = strings[j];
}
if (strings.Length > headers.Length) //process name has space?
{
for (var j = headers.Length; j < strings.Length; j++)
{
dic[headers[headers.Length - 1]] += " " + strings[j];
}
}
process.Add(dic);
}
}