程序的本地执行不需要回车return。远程执行呢?

Local execution of program does not requre carriage return. Remote execution does?

我有一个简单的可执行文件,它首先检查命令行参数、一些简单的初始化,然后是状态消息。

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 远程执行此可执行文件时,程序的执行会等待回车符 return 以在工具版本打印到控制台后继续执行程序。源代码中的任何一点都不存在任何类型的输入提示。

奇怪的是,如果我将打印版本号的行更改为以'\n'结尾:

std::cout << "Version Number: " << SOME_VERSION_NUM << '\n';

当我 运行 通过 psexec 再次执行此可执行文件时,程序的执行会等待回车 return 以在工具版本打印到控制台之前继续执行程序。

我不知道这里发生了什么。我希望能够通过 psexec 运行 这个程序而不需要回车 return 来继续。

首先,使用'\n'代替std::endl,输出是一样的,但可能不是实时出现的。这是因为 std::endl 做了一个 os.flush()

其次,我假设您使用的是像 here 这样的 powershell,这是一个常见问题。 (如果没有我会删除这个post)

解决方法是使用 cmdstdin 上传输一些数据,它会在执行后 return 正确。