上海网站建设公司兴田德润可以不,坪地网站建设市场,网站备案被注销吗,dede网站仿站经典工具在很久以前#xff0c;我写了一个系列#xff0c;Python和C和C的交互#xff0c;如下 http://blog.csdn.net/marising/archive/2008/08/28/2845339.aspx 目的是解决Python和C/C的互操作性的问题#xff0c;假如性能瓶颈的地方用C来写#xff0c;而一些外围工作用Python来完… 在很久以前我写了一个系列Python和C和C的交互如下 http://blog.csdn.net/marising/archive/2008/08/28/2845339.aspx 目的是解决Python和C/C的互操作性的问题假如性能瓶颈的地方用C来写而一些外围工作用Python来完成岂不是完美的结合。 今天发现了更方便的方式就是用subprocess模块创建子进程然后用管道来进行交互而这种方式在shell中非常普遍比如cat xxx.file | test.py 就是用的管道另外在hadoop中stream模式就是用的管道。 其实在python中和shell脚本其他程序交互的方式有很多比如 os.system(cmd)os.system只是执行一个shell命令不能输入、且无返回 os.open(cmd)可以交互但是是一次性的调用都少次都会创建和销毁多少次进程性能太差 所以建议用subprocess但是subprocess复杂一些可以参考python docs http://docs.python.org/library/subprocess.html 先看一个简单的例子调用ls命令两者之间是没有交互的 [python] view plaincopy import subprocess p subprocess.Popen(ls) 再看在程序中获取输出的例子 [c-sharp] view plaincopy import subprocess p subprocess.Popen(ls,stdoutsubprocess.PIPE) print p.stdout.readlines() 再看看有输入有输出的例子父进程发送say hi子进程输出 test say hi父进程获取输出并打印 [python] view plaincopy #test1.py import sys line sys.stdin.readline() print test,line #run.py from subprocess import * p Popen(./test1.py,stdinPIPE,stdoutPIPE) p.stdin.write(say hi/n) print p.stdout.readline() #result test say hi 看看连续输入和输出的例子 test.py [python] view plaincopy import sys while True: line sys.stdin.readline() if not line:break sys.stdout.write(line) sys.stdout.flush() run.py [python] view plaincopy import sys from subprocess import * proc Popen(./test.py,stdinPIPE,stdoutPIPE,shellTrue) for line in sys.stdin: proc.stdin.write(line) proc.stdin.flush() output proc.stdout.readline() sys.stdout.write(output) 注意run.py的flush和test.py中的flush要记得清空缓冲区否则程序得不到正确的输入和输出 C/C的类似伪代码如下 [cpp] view plaincopy char* line new char[2048]; while (fgets(line, 2028, stdin)) { printf(line); fflush(stdout);//必须清空缓冲区 } Popen对象 该对象提供有不少方法函数可用。而且前面已经用到了wait()/poll()/communicate() poll() 检查是否结束设置返回值 wait() 等待结束设置返回值 communicate() 参数是标准输入返回标准输出和标准出错 send_signal() 发送信号 (主要在unix下有用) terminate() 终止进程unix对应的SIGTERM信号windows下调用api函数TerminateProcess() kill() 杀死进程(unix对应SIGKILL信号)windows下同上 stdin stdout stderr 参数中指定PIPE时有用 pid 进程id returncode 进程返回值 参考 Popen其他参数的设置请参考python docs。 转载于:https://www.cnblogs.com/chenjianhong/p/4144477.html