Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确运行&x201C;顶部”;通过SSH执行命令?_C#_Ssh_Command - Fatal编程技术网

C# 如何正确运行&x201C;顶部”;通过SSH执行命令?

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

我使用这个库连接到我运行的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(“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);
    }
}