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实现希尔排序算法的原理与用法实例分析
Nov 23 Python
Selenium元素的常用操作方法分析
Aug 10 Python
对python以16进制打印字节数组的方法详解
Jan 24 Python
python里运用私有属性和方法总结
Jul 08 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
python单例模式的多种实现方法
Jul 26 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
解决运行出现'dict' object has no attribute 'has_key'问题
Jul 15 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 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正则表达式(regar expression)
2011/09/10 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
jQuery 前的按键判断代码
2010/03/19 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
2016/01/28 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
Python中暂存上传图片的方法
2015/02/18 Python
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
Python爬取成语接龙类网站
2018/10/19 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
机械设计毕业生自荐信
2014/02/02 职场文书
三项教育活动实施方案
2014/03/30 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android
Python编程中Python与GIL互斥锁关系作用分析
2021/09/15 Python
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android