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使用PyGame模块播放声音的方法
May 20 Python
解决Python requests 报错方法集锦
Mar 19 Python
Tesserocr库的正确安装方式
Oct 19 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 Python
python机器学习库xgboost的使用
Jan 20 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
keras之权重初始化方式
May 21 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
pycharm 快速解决python代码冲突的问题
Jan 15 Python
浅谈Python项目的服务器部署
Apr 25 Python
python中 .npy文件的读写操作实例
Apr 14 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中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
2017/02/15 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
python 经典数字滤波实例
2019/12/16 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
Python如何实现远程方法调用
2020/08/07 Python
.NET方向面试题
2014/11/20 面试题
护理专业学生的求职信范文
2013/12/11 职场文书
自我评价是什么
2014/01/04 职场文书
会计出纳员的自我评价
2014/01/15 职场文书
商场活动策划方案
2014/01/24 职场文书
秘书英文求职信范文
2014/01/31 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
辞职信格式范文
2015/05/13 职场文书
高三物理教学反思
2016/02/20 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis