2017-07-03 8 views
1

Ich benutze chilkat lib, um ssh zu meinem Raspberry Pi zu machen. Ich möchte einen Befehl mit ssh senden und die Ausgabe empfangen. Das Problem ist immer ich sende einen Befehl Ich erhalte einen Stapel Text.SSH - Behandlung der Ausgabe

Beispiel:

The programs included with the Debian GNU/Linux system are free software; 
the exact distribution terms for each program are described in the 
individual files in /usr/share/doc/*/copyright. 

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
permitted by applicable law. 
Last login: Fri Jun 30 23:17:28 2017 from desktop-ca160hm.local 
./status.sh 
echo 'end' 
[email protected]:~$ ./status.sh 
0 
[email protected]:~$ echo 'end' 
end 
[email protected]:~$ 

Aber ich will nur die 0 vom Befehl greifen ./status.sh

Ich versuche schon zu verwenden:

output = output.substr(output.find_first_of(str) + str.length(), 1); 

Wo str ist die var mit dem Befehl "./status.sh" und output ist die Zeichenfolge mit dem Text von ssh.

Aber output.find_first_of(str) immer zurück 0.

Volle Funktion:

string s7c_SFTP::SendCmd(string str, bool out) 
{ 
    if (s7c_SFTP::bloked) return "blocked"; 
    int channelNum = s7c_SFTP::ssh.QuickShell(); 
    if (channelNum < 0) return s7c_SFTP::ssh.lastErrorText(); 
    CkString cmd; 
    str = str + "\n"; 
    cmd.append((char *)str.c_str()); 
    cmd.append("echo 'end'\n"); 
    if (!s7c_SFTP::ssh.ChannelSendString(channelNum, cmd.getStringAnsi(), "ansi")) 
    { 
     cout << "[WARNING] Unable to contact with the device!" << endl; 
     return s7c_SFTP::ssh.lastErrorText(); 
    } 
    if (!s7c_SFTP::ssh.ChannelSendEof(channelNum)) return s7c_SFTP::ssh.lastErrorText(); 
    if (!s7c_SFTP::ssh.ChannelReceiveUntilMatch(channelNum, "end", "ansi", true)) return s7c_SFTP::ssh.lastErrorText(); 
    if (!s7c_SFTP::ssh.ChannelSendClose(channelNum)) return s7c_SFTP::ssh.lastErrorText(); 
    if (!s7c_SFTP::ssh.ChannelReceiveToClose(channelNum)) return s7c_SFTP::ssh.lastErrorText(); 
    if (out) 
    { 
     string output = s7c_SFTP::ssh.getReceivedText(channelNum, "ansi"); 
     output = output.substr(output.find_first_of(str) + str.length(), 1); 
     cout << output.c_str() << endl; // Only for debug 
     return output; 
    } 
    else return ""; 
} 

Antwort

0

Gelöst !!!

Wenn ich die var str an die Funktion übergebe, füge ich \n hinzu, um die Eingabe zu simulieren.

Und wenn ich string.find_fist_of(); machen mit dem \n zu zählen und nicht finden, kehren so 0.

Verwandte Themen