Локальное выполнение программы не требует возврата каретки. Удаленное выполнение делает?

У меня есть простой исполняемый файл, который начинается с проверки аргумента командной строки, некоторой простой инициализации, а затем сообщения о состоянии.

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, не требуя возврата каретки для продолжения.

1

Решение

Во-первых, используя '\n' вместо std::endlрезультат будет таким же, но может не отображаться в реальном времени. Это потому что std::endl сделать os.flush()

Во-вторых, я предполагаю, что вы используете PowerShell, как Вот, так это общая проблема.
(Если нет, я удалю этот пост)

И обходной путь заключается в передаче некоторых данных о stdin с cmd и он вернется правильно после выполнения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]