使用popen()时,bash脚本未返回返回代码以调用c ++程序

时间:2018-09-28 13:51:05

标签: c++ bash shell popen

我有一个在bash脚本中被调用的python脚本,如下所示:

python3 CheckRef.py --reference $EXPECTED --result $RESULT.npy
echo "return code = $?"

该脚本从python脚本打印正确的返回码。例如,如果python脚本返回254,它将打印-2

但是,当我在c ++程序中调用bash脚本时,返回码为空。它应该返回-2

testClass test;
auto result = test.execute(command.c_str());
std::cout << "result is " << result << std::endl;

有人可以告诉我我在做什么错吗?

这是函数execute()

std::string testClass::execute(const char* cmd) {
        char buffer[128];
        std::string result = "";
        FILE* pipe = popen(cmd, "r");
        if (!pipe) throw std::runtime_error("popen() failed!");
        try {
            while (!feof(pipe)) {
                if (fgets(buffer, 128, pipe) != NULL)
                    result += buffer;
            }
        } catch (...) {
            pclose(pipe);
            throw;
        }
        pclose(pipe);
        return result;
    }

1 个答案:

答案 0 :(得分:1)

您的execute函数返回一个字符串,其中包含命令的输出,而不是终止代码。

该进程的终止状态代码由pclose返回。当前,您放弃了对pclose

的调用的返回值