У меня есть простой исполняемый файл, который начинается с проверки аргумента командной строки, некоторой простой инициализации, а затем сообщения о состоянии.
if (argc != 2)
{
std::cout << "Must provide IP address as argument.\n";
}
Comms_SSL comms;
std::string msg;
std::cout << "Version Number: " << SOME_VERSION_NUM << std::endl;
Когда я запускаю исполняемый файл прямо с машины, он работает как я ожидал; Он распечатывает номер версии и продолжает программу.
Когда я запускаю этот исполняемый файл удаленно через psexec, выполнение программы ожидает возврата каретки для продолжения программы ПОСЛЕ того, как Версия инструмента выводится на консоль. Ни в одной точке исходного кода не существует подсказки для ввода любого вида.
Странная вещь, если я изменю строку, которая печатает номер версии, чтобы закончить на \ n:
std::cout << "Version Number: " << SOME_VERSION_NUM << '\n';
Когда я снова запускаю этот исполняемый файл через psexec, выполнение программы ожидает возврата каретки для продолжения программы ДО того, как Версия инструмента будет напечатана на консоли.
Я в недоумении от того, что здесь происходит. Я хотел бы иметь возможность запускать эту программу через psexec, не требуя возврата каретки для продолжения.
Во-первых, используя '\n'
вместо std::endl
результат будет таким же, но может не отображаться в реальном времени. Это потому что std::endl
сделать os.flush()
Во-вторых, я предполагаю, что вы используете PowerShell, как Вот, так это общая проблема.
(Если нет, я удалю этот пост)
И обходной путь заключается в передаче некоторых данных о stdin
с cmd
и он вернется правильно после выполнения.
Других решений пока нет …