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实现线程池代码分享
Jun 21 Python
python获取元素在数组中索引号的方法
Jul 15 Python
python实现SMTP邮件发送功能
Jun 16 Python
python itchat实现微信好友头像拼接图的示例代码
Aug 14 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
python 集合 并集、交集 Series list set 转换的实例
May 29 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 Python
django框架forms组件用法实例详解
Dec 10 Python
使用python3批量下载rbsp数据的示例代码
Dec 20 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
Python中requests做接口测试的方法
May 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
将二维数组转为一维数组的2种方法
2014/05/26 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
学习Node.js模块机制
2016/10/17 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
python3.5安装python3-tk详解
2019/04/26 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
护士思想汇报
2014/01/12 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
应用外语系自荐信
2014/06/26 职场文书
员工安全责任书范本
2014/07/24 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
分享Python获取本机IP地址的几种方法
2022/03/17 Python