一、commands模块

1、介绍

当我们使用Python进行编码的时候,但是又想运行一些shell命令,去创建文件夹、移动文件等等操作时,我们可以使用一些Python库去执行shell命令。

commands模块就是其中的一个可执行shell命令的库,commands模块是python的内置模块,共有三个函数:

getstatus(file):返回执行 ls -ld file 命令的结果( -ld 代表的是仅列出指定目录的详细信息)。

getoutput(cmd):执行cmd命令,并返回输出的内容,返回结果为str。

getstatusoutput(cmd):执行cmd命令,并返回执行的状态(status)和输出的内容(output),status代表的shell命令的返回状态,如果成功的话是0,output是shell的返回的结果。

注意:

commands从2.6版开始不推荐使用:该模块已在Python 3中删除。推荐使用subprocess模块(等下再介绍)。

在3.x版本中,getstatus()方法被移除,getoutput()和getstatusoutput()被放到了subprocess模块中。

2、getstatus(file)

返回执行 ls -ld file 命令的结果( -ld 代表的是仅列出指定目录的详细信息)。

#-*- coding: utf-8 -*-

importcommands

status= commands.getstatus("/opt") #即执行了:ls -ld /opt

printstatus#结果

drwxr-xr-x. 9 root root 4096 2019/11/11 16:49:40 /opt

3、getoutput(cmd)

执行cmd命令,并返回输出的内容,返回结果为str。

#-*- coding: utf-8 -*-

importcommands

output= commands.getoutput("ls -l /opt")printoutput#结果

总用量 28drwx--x--x 4 root root 4096 2019/11/11 16:49:40containerd

drwxr-xr-x 13 root root 4096 2019/01/15 14:48:15 nginx1.12drwxrwxr-x 7 500 500 4096 2019/01/14 10:30:05 node-v8.6.0-linux-x64

drwxr-xr-x 7 root root 4096 2019/09/17 09:31:24Projects

drwxr-xr-x 6 root root 4096 2019/01/10 19:17:30python36

drwxrwxr-x 8 root root 4096 2019/09/16 20:00:52 redis-4.0.10drwxr-xr-x 6 root root 4096 2019/01/16 17:47:34 ruby

4、getstatusoutput(cmd)

执行cmd命令,并返回执行的状态(status)和输出的内容(output),status代表的shell命令的返回状态,如果成功的话是0,output是shell的返回的结果。

#-*- coding: utf-8 -*-

importcommands

status, output= commands.getstatusoutput("ls -l /opt")print "status: %s" %statusprint "output: %s" %output#结果

status: 0

output: 总用量28drwx--x--x 4 root root 4096 2019/11/11 16:49:40containerd

drwxr-xr-x 13 root root 4096 2019/01/15 14:48:15 nginx1.12drwxrwxr-x 7 500 500 4096 2019/01/14 10:30:05 node-v8.6.0-linux-x64

drwxr-xr-x 7 root root 4096 2019/09/17 09:31:24Projects

drwxr-xr-x 6 root root 4096 2019/01/10 19:17:30python36

drwxrwxr-x 8 root root 4096 2019/09/16 20:00:52 redis-4.0.10drwxr-xr-x 6 root root 4096 2019/01/16 17:47:34 ruby

二、subprocess模块

1、介绍

subprocess模块允许你启动一个新的进程,连接输入/输出/错误的管道, 获得子进程的返回码。这个模块目标是代替一些老的模块,比如os.system和os.spawn。

subprocess模块中的常用函数

函数描述

subprocess.getoutput(cmd)

接收字符串格式的命令,执行命令并返回执行结果,其功能类似于os.popen(cmd).read()和commands.getoutput(cmd)。

subprocess.getstatusoutput(cmd)

执行cmd命令,返回一个元组(命令执行状态, 命令执行结果输出),其功能类似于commands.getstatusoutput()。

subprocess.call()

执行指定的命令,返回命令执行状态,其功能类似于os.system(cmd)。

subprocess.check_call()

Python 2.5中新增的函数。 执行指定的命令,如果执行成功则返回状态码,否则抛出异常。其功能等价于subprocess.run(..., check=True)。

subprocess.check_output()

Python 2.7中新增的的函数。执行指定的命令,如果执行状态码为0则返回命令执行结果,否则抛出异常。

subprocess.run()

Python 3.5中新增的函数。执行指定的命令,等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。

2、getoutput,getstatusoutput

上面我们说了,commands在3.x版本中,getstatus()方法被移除,getoutput()和getstatusoutput()被放到了subprocess模块中。

因此subprocess中的getoutput,getstatusoutput用法与commands的用法一模一样。

#-*- coding: utf-8 -*-

importsubprocess

output= subprocess.getoutput("pwd")print("output1: %s" %output)

status, output= subprocess.getstatusoutput("pwd")print("status2: %s" %status)print("output2: %s" %output)#结果

output1: /tmp

status2: 0

output2:/tmp

3、subprocess.call()

执行命令,返回状态码(命令正常执行返回0,其他状态码都是错误状态码)

subprocess.call(cmd, shell=False) 当shell=False的时候(默认),cmd为一个列表,当shell=True的时候,cmd为一个字符串,例如:

#-*- coding:utf-8 -*-

importsubprocesstry:#shell=False

ret1 = subprocess.call(["ls", "-l", "/opt"], shell=False)print("result1: %s" %ret1)#shell=True

ret2 = subprocess.call("lxxs -l /tmp", shell=True) #当命令是错误的时候,返回的状态码就不是0了print("result2: %s" %ret2)exceptException as e:print(e)#结果

总用量 28drwx--x--x 4 root root 4096 2019/11/11 16:49:40containerd

drwxr-xr-x 13 root root 4096 2019/01/15 14:48:15 nginx1.12drwxrwxr-x 7 500 500 4096 2019/01/14 10:30:05 node-v8.6.0-linux-x64

drwxr-xr-x 7 root root 4096 2019/09/17 09:31:24Projects

drwxr-xr-x 6 root root 4096 2019/01/10 19:17:30python36

drwxrwxr-x 8 root root 4096 2019/09/16 20:00:52 redis-4.0.10drwxr-xr-x 6 root root 4096 2019/01/16 17:47:34ruby

result1: 0/bin/sh: lxxs: 未找到命令

result2:127

4、subprocess.check_call()

执行命令,如果执行成功则返回状态码0,否则抛异常(subprocess.CalledProcessError)。

其实check_call基本和call功能一样,只是增加了返回状态码校验,如果执行状态码是0,则返回0,否则抛出异常

#-*- coding:utf-8 -*-

importsubprocesstry:

ret= subprocess.check_call("ls -l /opt", shell=True)print("result: %s" %ret)exceptsubprocess.CalledProcessError as e:print(e)

5、subprocess.check_output()

执行命令,如果执行成功则返回执行结果,否则抛异常

#-*- coding:utf-8 -*-

importsubprocesstry:

ret= subprocess.check_output("ls -l /opt", shell=True)print("result: %s" %ret)exceptsubprocess.CalledProcessError as e:print(e)#结果

result: b‘\xe6\x80\xbb\xe7\x94\xa8\xe9\x87\x8f 28\ndrwx--x--x 4 root root 4096 2019/11/11 16:49:40 containerd\ndrwxr-xr-x 13 root root 4096 2019/01/15 14:48:15 nginx1.12\ndrwxrwxr-x 7 500 500 4096 2019/01/14 10:30:05 node-v8.6.0-linux-x64\ndrwxr-xr-x 7 root root 4096 2019/09/17 09:31:24 Projects\ndrwxr-xr-x 6 root root 4096 2019/01/10 19:17:30 python36\ndrwxrwxr-x 8 root root 4096 2019/09/16 20:00:52 redis-4.0.10\ndrwxr-xr-x 6 root root 4096 2019/01/16 17:47:34 ruby\n‘

6、call、check_call、check_output的区别

根据上面的结果,我们可知:

ret1 = subprocess.call(cmd):ret1是cmd命令执行后的状态码,cmd执行的结果会在终端显示出来,也就是说如果不需要判断命令的执行结果的状态码,直接subprocess.call(cmd)即可,不需要用一个变量去接收状态码。

ret2 = subprocess.check_call(cmd):跟call一样的,只是如果状态码是不是0,即命令执行失败的时候会抛出异常。

ret3 = subprocess.check_output(cmd): call和check_call的ret是cmd命令的状态码,cmd的执行结果是在终端显示的,而check_output的cmd执行结果不会显示在终端,而是保存在ret中。

原文:https://www.cnblogs.com/Zzbj/p/12129073.html

python commands模块_python之commands和subprocess入门介绍(可执行shell命令的模块)相关推荐

  1. python commands用法_python之commands模块(执行Linux Shell命令)

    commands模块 用于执行Linux shell命令,要获得shell命令的输出只需要在后面参数写入('命令')就可以了. 需要得到命令执行的状态则需要判断$?的值, 在Python中有一个模块c ...

  2. python的subprocess模块执行shell命令

    subprocess模块可以允许我们执行shell命令 一般来说,使用run()方法就可以满足大部分情况 使用run执行shell命令 In [5]: subprocess.run('echo &qu ...

  3. python执行shell命令行_python执行命令行:python中执行shell命令行read结果

    +++++++++++++++++++++++++++++ python执行shell命令 1 os.system  (只有这个方法是边执行边输出,其他方法是最后一次性输出) 可以返回运行shell命 ...

  4. python中command是什么意思_python中command执行shell命令脚本方法

    在Python中有一个模块commands也很容易做到以上的效果. 看一下三个函数: 1). commands.getstatusoutput(cmd) 用os.popen()执行命令cmd, 然后返 ...

  5. python中执行shell命令_python中执行shell命令的几个方法小结-阿里云开发者社区

    Python 执行 shell 命令 最近有个需求就是页面上执行shell命令,第一想到的就是os.system os.system('cat /proc/cpuinfo') 但是发现页面上打印的命令 ...

  6. python调用shell命令-在Python中执行shell命令的6种方法,你都知道吗?

    原标题:在Python中执行shell命令的6种方法,你都知道吗? Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库.今天我们就讲解 ...

  7. Python 执行 shell命令 的几个方法小结

    参考:https://blog.csdn.net/ronnyjiang/article/details/53333538 Python 执行 shell 命令 Python 可以执行 shell 命令 ...

  8. python 执行shell_python执行shell命令的方法

    python执行shell命令的方法 os模块 os.system方式: import os os.system('top') os.system('cat /proc/cpuinfo') 说明 这个 ...

  9. [转载] python执行shell命令的几种方法

    参考链接: 使用Python执行Shell命令 目前我使用到的python中执行cmd的方式有三种: 1. 使用os.system("cmd") 这是最简单的一种方法,特点是执行的 ...

最新文章

  1. 关于大型网站技术演进的思考(四)-存储的瓶颈4
  2. 趁周末,来学点进阶知识:Java 动态编译
  3. 超级干货:关于数据中台的深度思考与总结
  4. spring源码分析之spring-core asm概述
  5. 腾讯大佬教我的工作方法(非常有效!)
  6. 存储过程——创建通用存储过程(七)
  7. 《走遍中国》珍藏版(一)
  8. 企业应用程序中需要捕获的5大Java性能指标
  9. Python:递归输出斐波那契数列
  10. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
  11. 零基础 Amazon Web Services (AWS) 入门教程图文版(三)
  12. 第七章 算术操作指令的实现
  13. qq邮件exchange服务器,解决Exchange邮件系统无法接收QQ邮件的问题
  14. java color 棕色,接近黑色的染发颜色 低调但是显气色的发色
  15. 启动界面、封面图片、Splash关不掉,一直转圈,无法进入
  16. 华为轮值CEO徐直军:应对快速变化的世界
  17. 阿里生鲜布局重要抓手!它如何解决全球生鲜商家痛点?
  18. 最大值减最小值等于区间长度_数理统计第19讲(区间估计概念,枢轴量法)
  19. 专业技术计算机应用能力考试题库,全国专业技术人员计算机应用能力考试题库-Excel,Word,XP...
  20. [转载]摩托车 各车型 坐姿 疲劳逻辑详解

热门文章

  1. 单纯形表格法求最值详解-组合数学
  2. mysql 5.7.21 winx64_mysql-5.7.21-winx64安装过程
  3. qW3xT.5 记一次解决挖矿病毒
  4. redis基本概念和原理
  5. 7 存储层次结构题库
  6. 伦敦金现价的左右因素
  7. poj 1475 java,poj1475Pushing Boxes
  8. C语言——Prim算法实现最小生成树
  9. 苹果iCloud转区指南-最新教程
  10. 带你全面了解compaction 的13个问题