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的网络编程库Gevent的安装及使用技巧
Jun 24 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
Python实现Linux中的du命令
Jun 12 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
Python实现计算对象的内存大小示例
Jul 10 Python
python多任务之协程的使用详解
Aug 26 Python
基于Python获取城市近7天天气预报
Nov 26 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
python实现录制全屏和选择区域录屏功能
Feb 05 Python
python 镜像环境搭建总结
Sep 23 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实现Huffman编码/解码的示例代码
2018/04/20 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
jQuery中index()方法用法实例
2014/12/27 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
详解Vue中的自定义指令
2020/12/07 Vue.js
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python中对list去重的多种方法
2014/09/18 Python
常见python正则用法的简单实例
2016/06/21 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
Python自动生产表情包
2017/03/17 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
求职信写作要突出重点
2014/01/01 职场文书
企业安全生产承诺书
2014/05/22 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL