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使用time模块实现指定时间触发器示例
May 18 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
python使用rpc框架gRPC的方法
Aug 24 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
Python如何使用input函数获取输入
Aug 06 Python
python实现无边框进度条的实例代码
Dec 30 Python
使用Python封装excel操作指南
Jan 29 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
Python爬虫基础之初次使用scrapy爬虫实例
Jun 26 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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
PDO::setAttribute讲解
2019/01/29 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
PHP中$GLOBALS与global的区别详解
2019/03/21 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
setTimeout学习小结
2017/02/08 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
在Python中使用Mako模版库的简单教程
2015/04/08 Python
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
django admin组件使用方法详解
2019/07/19 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
python中实现栈的三种方法
2020/12/19 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
授权委托书(完整版)
2014/09/10 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS