1、os.system
fork一个子进程 -->
子进程中调用exec函数执行 -->
父进程阻塞至子进程结束, 返回16进制结果(0,256,512)结果,十进制(0,1,2对应linux结果)status
2、os.spawn*(spawnl, spawnlp, spawnlpe, spawnv, spawnvp, spawnvpe)
用于执行可执行文件, 包括C编译后的可执行文件、python\或者shell脚本类。
返回进程编号类似
3、os.Popen
创建一个管道, fork子进程 --> 子进程执行命令,返回标准IO流,
可以向管道中读(执行结果)写(执行命令)数据。
如:os.popen("*****").read()
4、subprocess.call类似os.system
5、subprocess.Popen
接受字符串和列表命令行, 可以重定向输出至PIPE或者文件中
subprocess.Popen(cmd, shell=True, stdout=fhandle).stdout
subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE).stdout
如果不获返回值,可以不用wait(),直接避开阻塞
6、subprocess.getstatusoutput()
可以方便得到返回状态和输出,有点类似os.system和 os.Popen的合并返回结果
status, output = commands.getstatusoutput('sh hello.sh') print status, output
7、commands.getstatusoutput()
不阻塞,不和主进程通信, 无法知道是否执行完毕commands.getoutput()和getstatus()