获取标准shell 命令的输出内容

cmdline.h

#include <iostream> #include <mutex>

class Cmdline {

private:

        Cmdline() = default;

public:

        ~Cmdline() = default;

        Cmdline(const Cmdline& cmd) = delete;

        Cmdline& operator=(const Cmdline& cmd) = delete;

public:

        static Cmdline& getInstance();

        void executeCMD(const std::string& cmd, std::string& result);

private:

        static std::mutex m_mutex;

};

 

cmdline.cpp

#include "cmdline.h"

#include "stdio.h"

std::mutex Cmdline::m_mutex;

Cmdline& Cmdline::getInstance()

{

        std::lock_guard<std::mutex> lck(m_mutex);

        static Cmdline instance;

        return instance;

}

void Cmdline::executeCMD(const std::string& cmd, std::string& result)

{

        char buf_ps[1024] = {0};

        std::string temp_cmd = cmd + " 2>&1"; //标准错误重定向到标准输出

        FILE* ptr = nullptr;

        if((ptr = popen(temp_cmd.c_str(), "r")) != nullptr)

        {

                while(fgets(buf_ps, 1024, ptr) != nullptr)

                {

                        result += buf_ps;

                }

                pclose(ptr);

                ptr = nullptr;

        }

        else

        {

                std::cout << "popen %s error!!" << std::endl;

        }

}

 

test.cpp

#include "cmdline.h"

int main(int argc, char* argv[])

{

        if(argc != 2)

        {

                std::cout << "error number args" << std::endl;

                return -1;

        }

        std::string strResult = "";

        std::string cmd = argv[1];

        Cmdline::getInstance().executeCMD(cmd, strResult);

        std::cout << "result: " << strResult << std::endl;

        return 0;

}

 

posted @ 2018-09-25 17:17  HenryLiuY  阅读(4003)  评论(0编辑  收藏  举报