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常用模块用法分析
Sep 08 Python
Python2.x与Python3.x的区别
Jan 14 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 Python
选择python进行数据分析的理由和优势
Jun 25 Python
python自动化工具之pywinauto实例详解
Aug 26 Python
详解Django配置优化方法
Nov 18 Python
查看已安装tensorflow版本的方法示例
Apr 19 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
Jun 05 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
python实现猜拳游戏项目
Nov 30 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 disk_free_space 返回目录可用空间
2010/05/10 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
php 使用array函数实现分页
2015/02/13 PHP
Laravel框架实现发送短信验证功能代码
2016/06/06 PHP
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
判断网页编码的方法python版
2016/08/12 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Python中Yield的基本用法
2020/10/18 Python
初三物理教学反思
2014/01/21 职场文书
高三上学期学习自我评价
2014/04/23 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
关于环保的宣传稿
2015/07/23 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
python爬取某网站原图作为壁纸
2021/06/02 Python
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
python微信智能AI机器人实现多种支付方式
2022/04/12 Python