python中执行shell的两种方法总结


Posted in Python onJanuary 10, 2017

一、使用python内置commands模块执行shell

commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态;

该命令目前已经废弃,被subprocess所替代;

# coding=utf-8
'''
Created on 2013年11月22日
 
@author: crazyant.net
'''
import commands
import pprint
 
def cmd_exe(cmd_String):
  print "will exe cmd,cmd:"+cmd_String
  return commands.getstatusoutput(cmd_String)
 
if __name__=="__main__":
  pprint.pprint(cmd_exe("ls -la"))

二、使用python最新的subprocess模块执行shell

Python目前已经废弃了os.system,os.spawn*,os.popen*,popen2.*,commands.*来执行其他语言的命令,subprocesss是被推荐的方法;

subprocess允许你能创建很多子进程,创建的时候能指定子进程和子进程的输入、输出、错误输出管道,执行后能获取输出结果和执行状态。

# coding=utf-8
'''
Created on 2013年11月22日
 
@author: crazyant.net
'''
import shlex
import datetime
import subprocess
import time
 
def execute_command(cmdstring, cwd=None, timeout=None, shell=False):
  """执行一个SHELL命令
      封装了subprocess的Popen方法, 支持超时判断,支持读取stdout和stderr
      参数:
    cwd: 运行命令时更改路径,如果被设定,子进程会直接先更改当前路径到cwd
    timeout: 超时时间,秒,支持小数,精度0.1秒
    shell: 是否通过shell运行
  Returns: return_code
  Raises: Exception: 执行超时
  """
  if shell:
    cmdstring_list = cmdstring
  else:
    cmdstring_list = shlex.split(cmdstring)
  if timeout:
    end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
  
  #没有指定标准输出和错误输出的管道,因此会打印到屏幕上;
  sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096)
  
  #subprocess.poll()方法:检查子进程是否结束了,如果结束了,设定并返回码,放在subprocess.returncode变量中 
  while sub.poll() is None:
    time.sleep(0.1)
    if timeout:
      if end_time <= datetime.datetime.now():
        raise Exception("Timeout:%s"%cmdstring)
      
  return str(sub.returncode)
 
if __name__=="__main__":
  print execute_command("ls")

也可以在Popen中指定stdin和stdout为一个变量,这样就能直接接收该输出变量值。

总结

在python中执行SHELL有时候也是很必须的,比如使用Python的线程机制启动不同的shell进程,目前subprocess是Python官方推荐的方法,其支持的功能也是最多的,推荐大家使用。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
Python的Django框架中if标签的相关使用
Jul 15 Python
编写自定义的Django模板加载器的简单示例
Jul 21 Python
用tensorflow搭建CNN的方法
Mar 05 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
python爬虫 模拟登录人人网过程解析
Jul 31 Python
基于Python获取城市近7天天气预报
Nov 26 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 Python
Python趣味入门教程之循环语句while
Aug 26 Python
如何利用pygame实现打飞机小游戏
May 30 Python
Python用list或dict字段模式读取文件的方法
Jan 10 #Python
python导入时小括号大作用
Jan 10 #Python
python实现应用程序在右键菜单中添加打开方式功能
Jan 09 #Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 #Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 #Python
Python中的sort()方法使用基础教程
Jan 08 #Python
Python守护进程和脚本单例运行详解
Jan 06 #Python
You might like
关于php fread()使用技巧
2010/01/22 PHP
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
jQuery使用手册之一
2007/03/24 Javascript
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
一个基于jquery的图片切换效果
2010/07/06 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
python使用arp欺骗伪造网关的方法
2015/04/24 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
基于python中theano库的线性回归
2018/08/31 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
Python 实现一个简单的web服务器
2021/01/03 Python
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
工商管理实习生自我鉴定范文
2013/12/18 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
车辆年审委托书范本
2014/09/18 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
西柏坡导游词
2015/02/05 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python