You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C程序中读取Linux命令输出 检测调用的Python脚本运行错误

C程序捕获Python脚本执行异常的实现方法

前置说明

你要的检测能力分两种常见场景:仅判断脚本进程是否异常退出、捕获终端输出的错误文本,对应不同实现方案,你可以根据自己的需求选择。

方案1:解析system()返回值获取Python进程退出码(适配你现有代码逻辑)

Linux下system()函数的返回值不是直接等于子进程的退出码,需要配合<sys/wait.h>头文件的宏解析:

  • 若system()返回-1:调用本身失败(比如fork进程失败、shell无法执行命令)
  • 用WIFEXITED(ret)判断子进程是否正常退出,若为真则用WEXITSTATUS(ret)获取子进程实际退出码,就是你Python脚本里exit(xxx)传入的参数。

修改后的checker.c代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h> // 新增头文件,用于解析进程退出状态

int main(void){
    char run[30];
    snprintf(run, 30, "sudo python2.7 run.py");
    int ret = system(run);
    
    if (ret == -1) {
        printf("调用system失败,无法执行脚本\n");
        return 1;
    }
    if (WIFEXITED(ret)) { // 子进程正常退出
        int exit_code = WEXITSTATUS(ret);
        if (exit_code == 0) {
            printf("Python脚本执行正常,退出码0\n");
        } else {
            printf("Python脚本执行出错,退出码:%d\n", exit_code);
            // 这里写你需要的异常处理逻辑
        }
    } else {
        printf("Python脚本异常终止,未正常退出\n");
    }
    return 0;
}

小提示:你现有run.py用Python2的input()函数会把输入当作表达式求值,输入非数字内容会直接触发Python异常,建议改成g = int(raw_input(">"))更稳妥。


方案2:用popen()捕获脚本输出,识别错误文本

如果你不是靠退出码判断,而是要匹配终端打印的error这类错误内容,就用popen执行命令,直接读取输出内容做校验:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>

int main(void){
    // 加2>&1把标准错误也重定向到标准输出,避免漏捕获错误信息
    FILE* fp = popen("sudo python2.7 run.py 2>&1", "r");
    if (fp == NULL) {
        printf("popen调用失败\n");
        return 1;
    }

    char buf[1024] = {0};
    int has_error = 0;
    // 逐行读取脚本输出内容
    while (fgets(buf, sizeof(buf), fp) != NULL) {
        printf("脚本输出:%s", buf);
        // 匹配错误关键词,比如你脚本里打印的error
        if (strstr(buf, "error") != NULL) {
            has_error = 1;
        }
        memset(buf, 0, sizeof(buf));
    }

    int ret = pclose(fp);
    // 可以同时配合退出码做双重校验
    if (has_error || (WIFEXITED(ret) && WEXITSTATUS(ret) != 0)) {
        printf("检测到Python脚本运行错误\n");
        // 异常处理逻辑
    } else {
        printf("Python脚本运行正常\n");
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Drakke37

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 06:27:03