我的程序的目的是将cmd输出放在一个字符串中,但是有一个奇怪的问题:
string ChangeStatus()
{ status = exec("net stop mysql");
cout<<status;
return status;
}
string exec(char* cmd)
{
pipe = _popen(cmd, "r");
if (!pipe){
sprintf(returnErrorMSG,"ERROR");
return returnErrorMSG;
}
std::string result = "";
while(!feof(pipe))
{
if(fgets(buffer, 128, pipe) != NULL)
{
result +=buffer;
}
}
_pclose(pipe);
return result;
}
我的目标是捕获命令的输出(作为参数传递给exec函数,转换为字符串变量 -
现在问题是说,mysql当前正在运行:那么如果我调用函数exec(“net stop mysql”), 它试图停止mysql并将结果提供给从函数返回的结果字符串。结果字符串包含 - “Mysql服务已成功启动”....没关系。
但是如果mysql当前正在运行并且我调用了exec(“net start mysql”),那么它说“所请求的服务已经启动” - 这是完全合理的。我的观点是这个语句应该在exec函数的结果字符串中。这次结果字符串只是空的,exec函数返回一个空字符串。我需要在结果字符串中输出。
答案 0 :(得分:2)
在您的情况下,消息转到标准错误流,但popen()
仅处理标准输出。要捕获消息,您可以使用net stop mysql 2>&1
命令或实现可处理标准输出和标准错误流的popen()
版本。
根据您使用_popen()
而不是popen()
这一事实判断,我认为您可能不会写Unix。因此,第一个选项可能无法在您的操作系统中运行。