今天用python写脚本的时候,突然遇到一个需求。因为其他人已经写好了一个工具,编好的binary文件。python脚本想要复用此工具。于是乎就有了下面的小实验。
主要是使用python中的pipe来完成此功能
首先C语言代码是hello world级别的代码
main.c:
- 19 #include <stdio.h>
-
20 int main(int argc, char *argv[])
-
21 {
-
22 int i = 0;
-
23 for (i = 0; i < argc; ++i)
-
24 {
-
25 printf("argv[%d]:%s\n", i, argv[i]);
-
26 }
-
27 return 0;
-
28 }
编译生成a.out
接下来就是python的实验代码:
popen_test.py:
- import os
- def test():
- p = os.popen('./a.out 12345', 'r')
- while 1:
- line = p.readline();
- if '' == line:
- break
- print line
-
- if __name__ == '__main__':
- test()
然后命令行中输入
最后结果如下所示
- argv[0]:./a.out
-
-
argv[1]:12345
原理很简单,在python主进程中fork出来一个子进程,然后子进程执行传入的'common'命令,其中可以加入参数,以字符串形式传入。重定向子进程的标准输入输出到父进程pipe的两个文件描述符,然后就可像文件操作一样来操作子进程的输入、输出。
阅读(11535) | 评论(1) | 转发(1) |