#include "exec_cmd.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace proc = boost::process; namespace asio = boost::asio; namespace fs = boost::filesystem; ExecCMD::ExecCMD() { } int ExecCMD::ExecuteCmd(const std::string& exe, std::vector& args, const std::string& workDir) { // std::vector args = {"/c", "call", vsBat, "&&", "set"}; asio::io_context ctx; try { // asio::readable_pipe rp{ctx}; proc::process c{ctx, exe, args, proc::process_stdio{{}, rp, {}}, boost::process::process_start_dir(workDir)}; std::string line; boost::system::error_code ec; asio::streambuf buffer; while (true) { asio::read_until(rp, buffer, '\n', ec); if (!ec) { std::istream is(&buffer); std::getline(is, line); std::cout << line << "\n"; continue; } if (ec == asio::error::eof) { std::istream is(&buffer); std::getline(is, line); std::cout << line << "\n"; break; } else { #if defined(_WIN32) std::cerr << boost::locale::conv::between(ec.message(), "UTF-8", "GBK") << std::endl; #else std::cerr << ec.message() << std::endl; #endif break; } } c.wait(); int exit_code = c.exit_code(); return exit_code; } catch (const std::exception& e) { #if defined(_WIN32) std::cerr << "异常: " << boost::locale::conv::between(e.what(), "UTF-8", "GBK") << std::endl; #else std::cerr << e.what() << std::endl; #endif return 1; } }