Python与C语言popen函数操作外部程序输入输出的实操示例

周叙
周叙
发布时间:2026-10-12| 3人浏览过
原创

介绍如何在Python和C语言中使用popen函数启动外部命令并建立输入输出管道。通过准备测试程序,演示如何利用r模式获取程序标准输出,以及利用w模式向被调用程序写入数据,附带完整代码与运行结果对照。

目标与原理概述

popen函数用于创建一个管道并派生新进程执行指定命令。在标准C库和Python的os模块中均可调用。通过控制打开模式(r或w),可实现单向的数据流交换:r模式允许父进程读取子进程的标准输出;w模式允许父进程向子进程的标准输入写入数据。

准备测试环境

第1步:编译基础测试程序

目的:创建两个独立的测试可执行文件,分别用于验证读写逻辑。

// outputTest.c
#include <stdio.h>
int main(){
    printf("Just a test ! \n");
    return 0;
}
// inputTest.c
#include <stdio.h>
int main(){
    char buf[1024] = {0};
    scanf("%s",buf);
    printf("your input : %s\n",buf);
    return 0;
}

编译命令:gcc outputTest.c -o outputTest 和 gcc inputTest.c -o inputTest。请确保当前工作目录下已生成这两个可执行文件,并在后续操作中保持它们未被占用。

C语言中的popen操作

第2步:获取外部程序输出(读取模式)

目的:启动outputTest进程并通过管道读取其标准输出至缓冲区。

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
    FILE *read_fp;
    char buffer[BUFSIZ + 1];
    int chars_read;
    memset(buffer,'\0',sizeof(buffer));
    read_fp = popen("./outputTest","r");
    if(read_fp != NULL){
        chars_read = fread(buffer,sizeof(char),BUFSIZ,read_fp);
        if(chars_read > 0)
            printf("Output was : \n%s\nDone\n",buffer);
        pclose(read_fp);
        exit(EXIT_SUCCESS);
    }
    exit(EXIT_FAILURE);
}
C语言使用popen读取外部程序输出的终端运行结果
控制台正确打印了子进程生成的测试字符串

第3步:向外部程序传递参数(写入模式)

目的:将指定数据写入inputTest进程的标准输入流,并触发其回显逻辑。

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
    FILE *write_fp;
    char buffer[BUFSIZ + 1];
    sprintf(buffer,"Once...\n");
    write_fp = popen("./inputTest","w");
    if(write_fp != NULL){
        fwrite(buffer,sizeof(char),strlen(buffer),write_fp);
        pclose(write_fp);
        exit(EXIT_SUCCESS);
    }
    exit(EXIT_FAILURE);
}
C语言使用popen向外部程序写入数据的终端运行结果
外部程序成功接收缓冲区的字符串并执行回显

Python中的popen操作

第4步:使用os.popen读取输出

目的:在Python环境中直接调用系统接口获取子进程输出。

import os
var = os.popen('./outputTest').read()
print(var)
Python使用os.popen读取外部程序输出的终端运行结果
终端正常打印子进程的标准输出内容

第5步:使用os.popen写入输入

目的:通过Python脚本直接向目标进程发送输入数据。

import os
os.popen('./inputTest','w').write("test")
Python使用os.popen向外部程序写入数据的终端运行结果
外部程序成功接收并处理传入的字符串

完成判断与注意事项

完成判断:终端窗口按预期输出子进程的打印内容或回显结果,且程序正常退出、无段错误或管道阻塞,即说明管道交互配置正确。务必在操作完成后调用pclose()或确保文件句柄释放,以防止僵尸进程或文件描述符泄漏。

以上就是Python与C语言使用popen函数进行进程通信的详细内容,更多关于编程语言基础与系统级交互的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。