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 开发者节省时间的10个方法
Oct 02 Python
使用Python写个小监控
Jan 27 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
python 设置文件编码格式的实现方法
Dec 21 Python
matplotlib 输出保存指定尺寸的图片方法
May 24 Python
kaggle+mnist实现手写字体识别
Jul 26 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
Pycharm+Python工程,引用子模块的实现
Mar 09 Python
python实现超级玛丽游戏
Mar 18 Python
python使用nibabel和sitk读取保存nii.gz文件实例
Jul 01 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 include_path设置技巧分享
2011/07/03 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
2016/08/20 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
2018/07/12 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
Python中的tuple元组详细介绍
2015/02/02 Python
python线程、进程和协程详解
2016/07/19 Python
利用python实现数据分析
2017/01/11 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
python中二分查找法的实现方法
2020/12/06 Python
联想德国官网:Lenovo Germany
2018/07/04 全球购物
护士实习自我鉴定
2013/10/22 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
青年教师培训方案
2014/02/06 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
党的群众路线教育实践活动个人剖析材料
2014/10/07 职场文书
2015年党员承诺书
2015/01/21 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis