Python -> subprocess, os.system,commands,popend -> 模块对比
来源:互联网 发布:淘宝司法拍卖车辆过户 编辑:程序博客网 时间:2024/05/29 15:29
因为要在python脚本里执行系统命令,在网上找了一下相关的模块。
----------------------------------------------------------------------------------------
之前用的最多的是popen
而commands是对popen的封装;
而os.system则是调用C的system函数
但自从2.4之后,多了个subprocess,官方建议用subprocess取代以上的几种方法
command_info = subprocess.call('ls -l',shell=True)
----------------------------------------------------------------------------------------
对以上几种方法都试过,小结如下:
1. os.system执行命令后只返回执行结果的状态,即执行成功则返回0,如不成功则返回一个非零的数值,无法处理输入,所有输出都送到stdout,无法被你的脚本捕获。
2. commands模块是对popen的简单封装可以捕获命令的输出和结束状态,但无法控制输入,也就是说无法执行具有交互动作的命令,需要注意的是,此模块在Window下用不了,仅适用于*nix系统。
3. subprocess是在python2.4后才出现的,并且是官方推荐使用的模块。该模块可以更美网——傻瓜建站捕获执行命令子进程的标准输出stdou、错误输出 stderr以及标准输入stdin。也就是说可以与子进程进行一些交互操作,比如类似telnet,ftp这类的命令。但在我用的过程中发现一点不爽的是你还要自 己管理stdout的buffer,否则当命令的输出信息比较多时就会造成buffer的溢出,子进程也就hangup在那里了。
综上所述,如果只是需要执行一个系统命令,只需要知道执行的结果状态,对命令的输出不care,那就用os.system吧;如果不但需要执行的结果状态还需要捕获命令的输出,那就commands吧;如果想对执行的命令进行全面的控制,那就subprocess或popen。
----------------------------------------------------------------------------------------
之前用的最多的是popen
而commands是对popen的封装;
而os.system则是调用C的system函数
但自从2.4之后,多了个subprocess,官方建议用subprocess取代以上的几种方法
command_info = subprocess.call('ls -l',shell=True)
----------------------------------------------------------------------------------------
对以上几种方法都试过,小结如下:
1. os.system执行命令后只返回执行结果的状态,即执行成功则返回0,如不成功则返回一个非零的数值,无法处理输入,所有输出都送到stdout,无法被你的脚本捕获。
2. commands模块是对popen的简单封装可以捕获命令的输出和结束状态,但无法控制输入,也就是说无法执行具有交互动作的命令,需要注意的是,此模块在Window下用不了,仅适用于*nix系统。
3. subprocess是在python2.4后才出现的,并且是官方推荐使用的模块。该模块可以更美网——傻瓜建站捕获执行命令子进程的标准输出stdou、错误输出 stderr以及标准输入stdin。也就是说可以与子进程进行一些交互操作,比如类似telnet,ftp这类的命令。但在我用的过程中发现一点不爽的是你还要自 己管理stdout的buffer,否则当命令的输出信息比较多时就会造成buffer的溢出,子进程也就hangup在那里了。
综上所述,如果只是需要执行一个系统命令,只需要知道执行的结果状态,对命令的输出不care,那就用os.system吧;如果不但需要执行的结果状态还需要捕获命令的输出,那就commands吧;如果想对执行的命令进行全面的控制,那就subprocess或popen。
0 0
- Python -> subprocess, os.system,commands,popend -> 模块对比
- Python subprocess 模块, 替换os.system
- Python:os模块-subprocess模块
- Python modules : os, subprocess and commands
- python执行系统命令的方法 :os.system(),subprocess.popen(),commands
- os.system(),subprocess.popen()和commands来执行系统命令
- Python执行cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- Python调用本地cmd的各种实现方法及优劣(subprocess.Popen,os.system和commands.getstatusoutput)
- python commands模块在python3.x被subprocess取代
- python中os.system、os.popen、subprocess.popen的区别
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- Java中static变量作用和用法详解
- 8633 回文划分[C]
- Android逆向分析学习与研究(1)————工欲善其事必先利其器
- 打印出所有"水仙花数
- 三句话解释:java中,byte转为int为何要&0xff
- Python -> subprocess, os.system,commands,popend -> 模块对比
- new一个类对象和使用类名创建一个对象有什么区别?LinkList和ArrayList的区别
- 写好Java代码的30条经验总结
- 【HSA】Heterogeneous Systems Architecture
- nyoj277车牌号
- 开始iOS 7中自动布局教程(二)
- JAVA String.format 方法使用介绍
- jbpm学习五
- js正则表达式