_popen结果是一个字符串:一个特殊情况
_popen result in a string : a special case
我的程序目的是获得字符串中的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("netstop-mysql"),它试图停止mysql,并在函数返回的结果字符串中给出结果。结果字符串包含-"Mysql服务已成功启动"。。。。没事。
但是,如果mysql当前正在运行,并且我调用exec("net start mysql"),那么它会说"请求的服务已经启动"——这是完全合理的。我的观点是,这个语句应该在exec函数的结果字符串中。这一次,结果字符串只是空的,exec函数返回一个空字符串。我需要结果字符串中的输出。
在您的情况下,消息进入标准错误流,但popen()
只处理标准输出。要捕获消息,您可以使用net stop mysql 2>&1
命令或实现您的popen()
版本,该版本将处理标准输出和标准错误流。
根据您使用_popen()
而不是popen()
的事实判断,我认为您可能不适合Unix。所以第一个选项可能在您的操作系统中不起作用。
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 将指针分配给另一个指针时会发生什么情况?
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 如果我向一个12字节的缓冲区写入的字节数少于12,会发生什么情况
- 在没有任何锁的情况下加入另一个线程后是否需要内存围栏?
- 在 c 中给定一个固定数的情况下,找到所有可能的加法和组合(给定一个总和,找到它的可能的加法和排列
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++在不使用pow或循环的情况下计算一个数字的幂
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 在C++中,有没有一种方法可以让我在不传递参数的情况下拥有一个函数
- 如何在没有运算符>>的情况下从字符串流返回下一个令牌?
- 如何在不创建新配置的情况下对两个不同解决方案使用的一个项目使用不同的 #defines
- 是否可以在不扩展初始宏的情况下将一个宏作为参数提供给另一个宏?
- 将指针分配给另一个指针时会发生什么情况?
- 父类有 26 个构造函数重载.如何在不复制+粘贴 26 个重载的情况下将一个小任务附加到所有构造器?
- 如何在 C++03 中没有重复代码的情况下在堆栈上创建一个非常量 C 字符串数组?