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


Posted in Python onFebruary 10, 2014

一、函数介绍

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

运行效果如下:

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

这里主要用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);
}

运行效果如下:

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

这里主要用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

运行效果如下:
python基础教程之popen函数操作其它程序的输入和输出示例

4.2 给其它程序传参数

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

#! /usr/bin/python
import os
os.popen('./inputTest','w').write("test")

运行效果如下:

 
Python 相关文章推荐
浅析python协程相关概念
Jan 20 Python
解决pycharm工程启动卡住没反应的问题
Jan 19 Python
Python 使用Numpy对矩阵进行转置的方法
Jan 28 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
python tkinter实现界面切换的示例代码
Jun 14 Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 Python
python sqlite的Row对象操作示例
Sep 11 Python
Python如何使用字符打印照片
Jan 03 Python
Python随机数函数代码实例解析
Feb 09 Python
基于python实现操作redis及消息队列
Aug 27 Python
python用分数表示矩阵的方法实例
Jan 11 Python
Python3+Django get/post请求实现教程详解
Feb 16 Python
python基础教程之python消息摘要算法使用示例
Feb 10 #Python
go和python调用其它程序并得到程序输出
Feb 10 #Python
python实现socket端口重定向示例
Feb 10 #Python
python访问sqlserver示例
Feb 10 #Python
python实现代码行数统计示例分享
Feb 10 #Python
python基础教程之获取本机ip数据包示例
Feb 10 #Python
python基础教程之udp端口扫描
Feb 10 #Python
You might like
PHP浮点比较大小的方法
2016/02/14 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
JS event使用方法详解
2008/04/28 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
详解vue-router基本使用
2017/04/18 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
python下如何让web元素的生成更简单的分析
2008/07/17 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
解决python3输入的坑——input()
2020/12/05 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
美国网上书店:Barnes & Noble
2018/08/15 全球购物
新郎父亲婚宴答谢词
2014/01/11 职场文书
安全教育实施方案
2014/03/02 职场文书
田径运动会通讯稿
2014/09/13 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
nginx容器方式反向代理实战
2022/04/18 Servers
Python读取和写入Excel数据
2022/04/20 Python