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的Tornado框架异步编程入门实例
Apr 24 Python
Python ldap实现登录实例代码
Sep 30 Python
详解python中的 is 操作符
Dec 26 Python
Python实现简易Web爬虫详解
Jan 03 Python
python利用小波分析进行特征提取的实例
Jan 09 Python
python-docx文件定位读取过程(尝试替换)
Feb 13 Python
Django限制API访问频率常用方法解析
Oct 12 Python
python分布式爬虫中消息队列知识点详解
Nov 26 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
python 实现定时任务的四种方式
Apr 01 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 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
关于IIS php调用com组件的权限问题
2012/01/11 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
use jscript List Installed Software
2007/06/11 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
python中反射用法实例
2015/03/27 Python
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
Scrapy的简单使用教程
2017/10/24 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
应用心理学个人求职信范文
2013/12/11 职场文书
重阳节登山活动方案
2014/02/03 职场文书
家庭贫困证明
2014/09/23 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
2014年社区矫正工作总结
2014/11/18 职场文书
公务员个人总结
2015/02/12 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
工作后的感想
2015/08/07 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js