Я ищу рабочий пример того, как использовать pstream. Я планирую открыть сеанс ssh с удаленного хоста, выполнить команду и получить ее вывод. До сих пор я получил:Pstreams - как писать на stdin и получать выходные данные?
#include <pstreams/pstream.h>
#include <string>
#include <iostream>
int main(){
redi::pstream proc("ssh localhost -t -t", redi::pstreams::pstdout | redi::pstreams::pstdin);
std::string line;
std::cout.flush();
while (std::getline(proc.out(), line)){
std::cout << "stdout: " << line << '\n';
}
return 0;
}
Но он не работает должным образом. Вместо того, чтобы:
stdout: [email protected]:
я получаю это:
[email protected]:
@Update Несколько минут назад я заметил, что после ввода пароля я получаю правильный вывод. Похоже, что openssh каким-то образом блокирует мою программу от отправки текста в stdout. Вот пример:
#include <pstreams/pstream.h>
#include <string>
#include <iostream>
int main(){
std::cout << "1\n";
redi::pstream proc("ssh localhost -t -t", redi::pstreams::pstdout | redi::pstreams::pstdin);
std::cout << "2\n";
std::string line;
std::cout << "3\n";
std::cout.flush();
std::cout << "4\n";
while (std::getline(proc.out(), line)){
std::cout << "5\n";
std::cout << " " << "stdout: " << line << '\n';
std::cout << "6\n";
}
std::cout << "7\n";
return 0;
}
Выход:
1
2
3
4
[email protected]'s password:
Здесь я должен ввести пароль, а остальное выглядит следующим образом:
5
stdout: Last login: Wed Nov 12 14:57:36 2014 from localhost.localdomain
6
5
stdout:
Моя первая догадка что " archer @ localhost's password: ", выводимый SSH, не сохраняется в буфере объектов pstreams (proc.out()).
'\' n \ '' должно быть '\' \ n \ '' или 'std :: endl'. –
@CaptainObvlious Ну, это одно, но это не решает главной проблемы. –
Попробуйте использовать 'line.c_str()' вместо этого и вызовите 'std :: cout.flush()' после вашего вывода. – Pickle