编写Python脚本时, 经常要执行Linux操作系统命令, 如mkdir zzzz. 目前比较推荐的方法是使用subprocess模块.

通过该模块的帮助文档, 可看到其主要提供了4个API, 和相应的使用说明.

Main API

========

call(...): Runs a command, waits for it to complete, then returns

the return code.

check_call(...): Same as call() but raises CalledProcessError()

if return code is not 0

check_output(...): Same as check_call() but returns the contents of

stdout instead of a return code

Popen(...): A class for flexibly executing a command in a new process

结合API的说明来看, 若执行简单的命令, 像前面所说mkdir zzzz, 前三个API都可以, 只是处理细节稍有不同.

In [54]: subprocess.call("mkdir /tmp/zzzz", shell=True)

Out[54]: 0

In [55]: subprocess.call("mkdir /tmp/zzzz", shell=True)

mkdir: cannot create directory `/tmp/zzzz': File exists

Out[55]: 1

In [56]: subprocess.check_call("mkdir /tmp/zzzz", shell=True)

Out[56]: 0

In [57]: subprocess.check_call("mkdir /tmp/zzzz", shell=True)

mkdir: cannot create directory `/tmp/zzzz': File exists

---------------------------------------------------------------------------

CalledProcessError                        Traceback (most recent call last)

<ipython-input-57-2a531671f16e> in <module>()

----> 1 subprocess.check_call("mkdir /tmp/zzzz", shell=True)

/usr/local/python27/lib/python2.7/subprocess.pyc in check_call(*popenargs, **kwargs)

184         if cmd is None:

185             cmd = popenargs[0]

--> 186         raise CalledProcessError(retcode, cmd)

187     return 0

188

CalledProcessError: Command 'mkdir /tmp/zzzz' returned non-zero exit status 1

In [59]: subprocess.check_output("mkdir /tmp/zzzz", shell=True)

Out[59]: ''

In [60]: subprocess.check_output("mkdir /tmp/zzzz", shell=True)

mkdir: cannot create directory `/tmp/zzzz': File exists

---------------------------------------------------------------------------

CalledProcessError                        Traceback (most recent call last)

<ipython-input-60-4911eea4ecd3> in <module>()

----> 1 subprocess.check_output("mkdir /tmp/zzzz", shell=True)

/usr/local/python27/lib/python2.7/subprocess.pyc in check_output(*popenargs, **kwargs)

217         if cmd is None:

218             cmd = popenargs[0]

--> 219         raise CalledProcessError(retcode, cmd, output=output)

220     return output

221

CalledProcessError: Command 'mkdir /tmp/zzzz' returned non-zero exit status 1

又若执行复杂的命令或脚本, 需要获取其标准输出, 和标准错误输出, 就要用到Popen接口了. 前三个API, 其实是第四个的简化版, 是将参数直接传给了Popen的构造函数, 不过大部分参数都是保留了默认值, 来看下该构造函数的样子.

def __init__(self, args, bufsize=0, executable=None,

stdin=None, stdout=None, stderr=None,

preexec_fn=None, close_fds=False, shell=False,

cwd=None, env=None, universal_newlines=False,

startupinfo=None, creationflags=0):

注意参数shell=False, 其含义为, 是否将args(要执行的命令)置于操作系统的shell环境中运行.

下面给出一个代码段, 用到了Popen, 算是对subprocess模块的小结.

#!/usr/bin/env python

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

import subprocess

def exec_cmd(cmd):

proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,

stderr=subprocess.PIPE, shell=True)

stdout, stderr = proc.communicate()

if proc.returncode != 0:

return proc.returncode, stderr

return proc.returncode, stdout

def main():

cmd = "ls -l"

# cmd = "ls -lz"

returncode, stdoutdata = exec_cmd(cmd)

print str(returncode) + " - " + stdoutdata

if __name__ == '__main__':

main()

转载于:https://blog.51cto.com/coveringindex/2061804

Python标准库 - subprocess相关推荐

  1. Python使用标准库subprocess调用外部程序

    Python标准库subprocess中提供了很多调用外部程序创建子进程的对象,本文重点演示Popen对象的stdin和stdout属性的用法. 假设有一个程序externProgram.py,内容如 ...

  2. Python标准库介绍

    1. 关于Python标准库 众所周知,Python是一个依赖强大的组件库完成对应功能的语言,为了便捷实现各项功能,前辈大牛们打造了多种多样的工具库公开提供给大众使用,而越来越多的库已经因为使用的广泛 ...

  3. python标准库有多强大_Python标准库——走马观花

    原文:Python标准库--走马观花 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python的一大好处在于它有一套很有用的标 ...

  4. Python标准库:一些受欢迎的模块

    目录 1.模块sys 1).介绍 1.模块sys中一些重要的函数和变量 2.变量sys.argv 3.函数sys.exit 4.映射sys.modules 5.变量sys.path 6.变量sys.p ...

  5. Python标准库简介

    很系统的简介了Python标准库的使用方向,对形成知识框架很有帮助. 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python ...

  6. 转--Python标准库之一句话概括

    作者原文链接 想掌握Python标准库,读它的官方文档很重要.本文并非此文档的复制版,而是对每一个库的一句话概括以及它的主要函数,由此用什么库心里就会有数了. 文本处理 string: 提供了字符集: ...

  7. Python 标准库

    Python 标准库 标准库 标准库列表如下 标准库 Python 标准库非常庞大,所提供的组件涉及范围十分广泛,正如以下内容目录所显示的.这个库包含了多个内置模块 (以 C 编写),Python 程 ...

  8. 常用Python标准库

    众所周知,Python有庞大的库资源,有官方标准库以及第三方的扩展库.每个库都一把利器,能帮助我们快速处理某方面的问题.作为一名python的初学者,当把基本的语法.列表和元组.字典.迭代器.异常处理 ...

  9. 超全汇总!200 多个 Python 标准库介绍

    关于Python标准库 众所周知,Python是一个依赖强大的组件库完成对应功能的语言,为了便捷实现各项功能,前辈大牛们打造了多种多样的工具库公开提供给大众使用,而越来越多的库已经因为使用的广泛和普遍 ...

最新文章

  1. Bootstrap 基本模板
  2. git查看每个版本间的差异
  3. rds mysql 磁盘空间,RDS MySQL 空间问题的原因和解决
  4. 计算机网络按照延伸距离划分为,大学计算机考试练习题.doc
  5. 协同工作php,PHPOA:灵活、高效、协同,让企业高效运转
  6. spring boot: java @interface注解
  7. 图像处理系列——直方图之直方图规定化(Histogram Specification)
  8. 浏览器预览pdf文件名称不对,Java使用iText修改Pdf文件的标题属性,自定义预览文件名
  9. 电路交换、报文交换、分组交换的区别与优缺点
  10. 计算机 word 节是什么,Word分节符的含义和使用方法详解-word技巧-电脑技巧收藏家...
  11. 解决尝试连接“ECONNREFUSED - 连接被服务器拒绝”失败的问题
  12. shell输出标准时间格式
  13. SSL证书中的128位加密和256位加密有何区别?
  14. RocketMQ——顺序消费(代码)
  15. 地址解析(仅供参考与学习)<Java>
  16. ffmpeg js转换音频_微信FFMPEG 扩展转换音频格式
  17. 垃圾回收之如何判断对象可以回收、四种引用以及实际案例操作
  18. html中scr作用,车用尿素在SCR系统中的作用讲解?
  19. 【Audio】Unity音频模块:加载、转换、剪切、混音、合并
  20. 复盘2021,拥抱2022!

热门文章

  1. Kippo:一款强大的SSH蜜罐工具
  2. Ubuntu 16.04 下安装运行 Suricata
  3. 使用java的java 命令,直接调用执行class文件
  4. Windows中,文件所在路径查找命令
  5. ie不兼容的几个js问题及解决办法
  6. 关于Vue中,$this.router.push到当前页面,只是传入参数不同,页面不刷新的问题解决
  7. 80端口被占用时的终极解决方法
  8. 如何在JavaScript中检查变量是否为整数?
  9. bloom-generate 打包 ros 版本 noetic 的包及报 /usr/bin/ld: 找不到 -lpthreads与undefined reference pthread_create
  10. 图像转svg,及绘制svg图像