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 相关文章推荐
Python格式化压缩后的JS文件的方法
Mar 05 Python
小议Python中自定义函数的可变参数的使用及注意点
Jun 21 Python
结合Python的SimpleHTTPServer源码来解析socket通信
Jun 27 Python
浅谈Python实现Apriori算法介绍
Dec 20 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
Django配置文件代码说明
Dec 04 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
Python 存取npy格式数据实例
Jul 01 Python
python如何代码集体右移
Jul 20 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
python 制作一个gui界面的翻译工具
May 14 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
解决Python传递中文参数的问题
2015/08/04 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
10个示例带你掌握python中的元组
2020/11/23 Python
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
男女时尚与复古风格在线购物:RoseGal(全球免费送货)
2017/07/19 全球购物
自荐信怎么写好
2013/11/11 职场文书
物业门卫岗位职责
2013/12/28 职场文书
大学自我评价
2014/02/12 职场文书
项目施工员岗位职责
2014/03/09 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
投资意向协议书
2015/01/29 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
大学生党课感想
2015/08/11 职场文书
初中思想品德教学反思
2016/02/24 职场文书
关于Numpy之repeat、tile的用法总结
2021/06/02 Python
Python OpenGL基本配置方式
2022/05/20 Python