python基础教程之popen函数操作其它程序的输入和输出示例

 更新时间:2014年02月10日 11:55:50   作者:  
popen函数允许一个程序将另一个程序作为新进程启动,并可以传递数据给它或者通过它接收数据,下面使用示例学习一下他的使用方法

一、函数介绍

1.1 函数原型:

复制代码 代码如下:

#include <stdio.h>
FILE *popen(const char *command,const char *open_mode);

1.2 说明

popen函数允许一个程序将另一个程序作为新进程启动,并可以传递数据给它或者通过它接收数据。command字符串是要运行的程序名和相应参数(比如:ls或ls -l),openmode必须是 r 或w。如果是r,被调用程序的输出可以被调用它的程序使用;如果是w,调用程序就可以用fwrite向被调用程序发送数据作为它在标准输入流上的输入。

二、测试程序准备

这里准备两个很简单的程序供下面测试使用。

2.1 输出测试程序

复制代码 代码如下:

// outputTest.c
#include <stdio.h>

int main()
{
        printf("Just a test ! \n");
        return 0;
}

主要是实现向标准输出设备输出字符串,供下面的程序进行测试。

2.2 输入测试程序

复制代码 代码如下:

// inputTest.c
#include <stdio.h>

int main()
{
        char buf[1024] = {0};
        scanf("%s",buf);
        printf("your input : %s\n",buf);
        return 0;
}

主要是实现从标准输入设备输入字符串并输出,供下面的程序进行测试。

三、popen操作示例(C代码)

3.1 获得程序输出

以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);
}

运行效果如下:


这里主要用r参数获得被调用程序的输出。

3.2 给其它程序传参数

以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);
}

运行效果如下:

这里主要用w参数向被调用程序传参数。

四、poepn操作示例(python代码)

其实python也可以这样玩的。

4.1 获得程序输出

还以上文提到的outputTest程序为例,代码如下:

复制代码 代码如下:

#! /usr/bin/python

import os
#var = os.popen('ls -l').read()
var = os.popen('./outputTest').read()
print var

运行效果如下:

4.2 给其它程序传参数

还以上文提到的inputTest程序为例,代码如下:

复制代码 代码如下:

#! /usr/bin/python

import os
os.popen('./inputTest','w').write("test")

运行效果如下:

 

相关文章

  • Python实现批量提取Word文档表格数据

    Python实现批量提取Word文档表格数据

    在大数据处理与信息抽取领域中,Word文档是各类机构和个人普遍采用的一种信息存储格式,本文将介绍如何使用Python实现对Word文档中表格的提取,感兴趣的可以了解下
    2024-03-03
  • django多对多表的创建,级联删除及手动创建第三张表

    django多对多表的创建,级联删除及手动创建第三张表

    这篇文章主要介绍了django多对多表的创建,级联删除及手动创建第三张表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python cv2在验证码识别中应用实例解析

    python cv2在验证码识别中应用实例解析

    这篇文章主要介绍了python cv2在验证码识别中应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 在Python中实现决策树算法的示例代码

    在Python中实现决策树算法的示例代码

    决策树(Decision Tree)是一种常见的机器学习算法,被广泛应用于分类和回归任务中,并且再其之上的随机森林和提升树等算法一直是表格领域的最佳模型,所以本文将介绍理解其数学概念,并在Python中动手实现,这可以作为了解这类算法的基础知识
    2023-08-08
  • Python全局变量与global关键字常见错误解决方案

    Python全局变量与global关键字常见错误解决方案

    这篇文章主要介绍了Python全局变量与global关键字常见错误解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 如何彻底解决python NameError:name '__file__' is not defined

    如何彻底解决python NameError:name '__file__' is not 

    这篇文章主要给大家介绍了关于如何彻底解决python NameError:name '__file__' is not defined的相关资料,文中通过图文将解决的办法介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Python使用Opencv实现图像特征检测与匹配的方法

    Python使用Opencv实现图像特征检测与匹配的方法

    这篇文章主要介绍了Python使用Opencv实现图像特征检测与匹配的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Python制作动态字符画的源码

    Python制作动态字符画的源码

    python字符画是一个简单有趣的图画,它一般由程序制作而成,接下来通过本文给大家分享Python制作动态字符画的源码,需要的朋友可以参考下
    2021-08-08
  • python中内置库os与sys模块的详细介绍

    python中内置库os与sys模块的详细介绍

    这篇文章主要介绍了python中内置库os与sys模块的详细介绍,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • Python安装第三方库及常见问题处理方法汇总

    Python安装第三方库及常见问题处理方法汇总

    本文给大家汇总介绍了Python安装第三方库及常见问题处理方法,非常的简单使用,有需要的小伙伴可以参考下
    2016-09-09

最新评论