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 "";
}