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命令行参数解析模块getopt使用实例
Apr 13 Python
使用python和pygame绘制繁花曲线的方法
Feb 24 Python
python安装教程
Feb 28 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
python中的colorlog库使用详解
Jul 05 Python
Django Docker容器化部署之Django-Docker本地部署
Oct 09 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
Python tempfile模块生成临时文件和临时目录
Sep 30 Python
python实现三种随机请求头方式
Jan 05 Python
python 将Excel转Word的示例
Mar 02 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编实现程动态图像的创建代码
2008/09/28 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
Redis构建分布式锁
2017/03/28 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
Postman模拟发送带token的请求方法
2018/03/31 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
Python+django实现简单的文件上传
2016/08/17 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
高中生毕业自我鉴定
2013/10/10 职场文书
大学生毕业自我评价范文分享
2013/11/07 职场文书
给儿子的表扬信
2014/01/15 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS