python运行命令_Python中执行外部命令

有很多需求需要在Python中执行shell命令、启动子进程,并捕获命令的输出和退出状态码,类似于Java中的Runtime类库。

subprocess模块的使用:

Python使用最广泛的是标准库的subprocess模块,用来替换os.system(),os.spawn*(),os.popen*()和commands.*等模块与函数。

使用subprocess最简单的方式就是用它提供的便利函数,call,check_all与check_output,当便利函数满足不了要求再使用Popen类。

1. call

subprocess(args,*,stdin=None,stout=None,stderr=None,shell=False)

789733-20180330001430044-1504672276.png

shell=True,Python会先运行一个shell,再用shell解释字符串,而不是传递一个列表。

2. check_call

check_all与call类似,只是遇到异常情况返回的形式不同,它会抛出subprocess.CalledProcessError异常

789733-20180330002214591-1796403491.png

3. check_output

这个便利函数是使用最多了,它可以获取命令的结果,而不是退出状态码

789733-20180330003059256-361913075.png

如果想要捕捉退出状态码,可以通过抛出的subprocess.CalledProcessError异常

import subprocess

try:

output = subprocess.check_output('ls /zz',shell=True)

except subprocess.CalledProcessError as e:

output = e.output

code = e.returncode

print (code,output)

执行结果:

789733-20180330004917410-1163758611.png

如果想捕获命令的错误输出,需将错误输出重定向到标准输出

subprocess.check_output(['cmd','arg1','arg2'],stderr=subprocess.STDOUT)

789733-20180330010104503-1470674313.png

4. 使用Popen

下面的exexute_cmd函数对Popen,进行了封装,执行成功,返回标准输出和状态码,失败是返回状态码和错误输出。

#!/usr/bin/python

#coding=utf8

import subprocess

def execute_cmd(cmd):

p = subprocess.Popen(cmd,

shell=True,

stdin=subprocess.PIPE,

stdout=subprocess.PIPE,

stderr=subprocess.PIPE)

stdout, stderr = p.communicate()

if p.returncode != 0:

return p.returncode, stderr

return p.returncode, stdout

if __name__=='__main__':

cmd='ls /u01'

returncode,out=execute_cmd(cmd)

if returncode != 0:

raise SystemExit('execute {0} err :{1}'.format(cmd,out))

else:

print("execute command ({0} sucessful)".format(cmd))

789733-20180330013131806-1618967709.png

目录不存时:

789733-20180330013206267-1145685531.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux多选项菜单脚本,linux shell 编写菜单脚本事例

menu2文件代码:---#!/bin/sh#menu2#Main menu script#ignore ctrl-c and QUIT interruptstrap "" 2 3 15MYDATEdate %d/%m/%YTHIS_HOSThostname -sUSERwhoami#user level fileUSER_LEVELSpriv.user#hold fileHOLD1hold1.$$#colour functionfunction colou…

python简单爬虫入门一_Python爬虫快速入门:基本结构简单实例

本爬虫系列入门教程假设读者仅有一点点Python基础或者近乎为零的基础。如果是有Python基础的可以跳过一些对于Python基本知识的补充。 爬虫能干什么呢?一句话概括,正常通过浏览器可以获取的数据,爬虫都可以获取。这句话可以说是包罗万象。一是…

Windows下rocketmq mqnamesrv.exe 启动成功,但是mqbroker.exe启动失败

1、mqnamesrv.exe启动成功 2、启动mqbroker.exe失败 解决办法,删除C:\Users\"当前系统用户名"\store下的所有文件,就可以了转载于:https://www.cnblogs.com/roujingchuxia/p/7685796.html

python加入中小学课程_通知:中小学将新增一门课!对2008-2013年出生的孩子影响最大!...

很多家长都在发愁: “现在孩子竞争这么激烈,奥数、外语、舞蹈、钢琴...样样都行,我该让孩子学点什么,才不会被同龄人甩下?” 其实,人工智能时代,孩子们的竞争战地正在转到——少儿编程&#xff…

linux 网络连接未知,ubuntu – 网络问题. Ifup说未知界面

这是ifconfig的输出# ifconfigenp0s3 Link encap:Ethernet HWaddr 08:00:27:ef:b6:e6inet addr:192.168.2.3 Bcast:192.168.2.255 Mask:255.255.255.0inet6 addr: fe80::cf19:776a:4d5c:36e0/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:713069 …

linux --- vsftp

vsftp 一、简介与原理 1、VSFTP(very secuery file tranfer protocol) 2、主动模式: 3、被动模式: 4、服务器程序: > vsftpd 5、install: >vaftpd-2.2.2-11.e16.i686.rpm >yum -y install vsftpd …

go tcp客户端自动重连_使用 Go 语言创建 WebSocket 服务

今天介绍如何用 Go 语言创建 WebSocket 服务,文章的前两部分简要介绍了 WebSocket 协议以及用 Go 标准库如何创建 WebSocket 服务。第三部分实践环节我们使用了 gorilla/websocket 库帮助我们快速构建 WebSocket 服务,它帮封装了使用 Go 标准库实现 WebS…

linux系统终端more,一篇文章让你学透Linux系统中的more命令

Linux系统下有很多实用工具可以让你在终端界面查看文本文件。其中一个就是 more。more 跟我之前另一篇文章里写到的工具 —— less 很相似。它们之间的主要不同点在于 more 只允许你向前查看文件。尽管它能提供的功能看起来很有限,不过它依旧有很多有用的特性值得你…

简单说下C#变量的作用域

变量的作用域分为局部变量和全局变量举个小例子 class Program { int i 3;//这个变量i 需要实例化Program才能使用 static void Main(string[] args) { Program aa new Program(); int g aa.i; int i 5;//这个变量i只能作用在Main方法中 int f i; Console.WriteLine(f); C…

python项目开发案例集锦_在线分享 | 在 VS Code 中一站式完成 Python 项目开发

往期活动回顾VS Code 中文社区自成立以来,已经举办了4场活动:Workshop | First Step to VS Code 基础篇 Workshop | First Step to VS Code 进阶篇 在线沙龙 | 程序员职业生涯如何不迷茫 干货回顾 | VS Cod…

jvm--Garbage Collection

垃圾回收(GC)一直是java语言的重中之重。 1 对象状态鉴别 1.1 标记对象是否可回收一般有两种算法: 引用计数算法:给每个对象添加一个引用计数器,当引用一次时1,当引用时效时-1,当计数器为0时即可…

linux安装mongo卸载mongo,CentOS7安装及卸载MongoDB.md

安装 MongoDB 社区版本配置 yum 包管理系统创建 /etc/yum.repos.d/mongodb-org-4.2.repo 文件,这样你就可以使用 yum 安装 MongoDB,文件内容如下:123456[mongodb-org-4.2]nameMongoDB Repositorybaseurlhttps://repo.mongodb.org/yum/redhat/…

程序固化到优盘中_将Windows 8/10 系统装进优盘

介绍Windows To Go技术Windows 有一项相当吸引人的神奇功能——“Windows To Go”,它可以让你将 Windows 完整安装到U盘、移动硬盘等便携设备上,并且能随处在不同的电脑硬件上直接运行,让系统可以随身携带!简单说来,这…

如何获得物体的主要方向?

问题来源为网友提供的资料,原文地址为:《Object Orientation, Principal Component Analysis & OpenCV》 问题描述:对于这样的图像(2副,采用了背投光),如何获得上面工件的主要方向主要思路&…

Linux的开源免费办公软件,开源免费Office办公套件(LibreOffice)

LibreOffice是一款全面的开源免费Office办公套件,软件拥有强大的数据导入和导出功能,能直接导入 PDF 文档、微软 Works、LotusWord,支持主要的 OpenXML 格式。软件本身并不局限于 Debian 和Ubuntu 平台,支持 Windows、Mac、PRM pa…

iOS11最新隐私信息访问列表

今天早上应用出现拍照上传闪退的紧急bug,才发现在iOS11中,隐私权限配置又发生了改变,将原来的相册访问权限分开了,现在有读写两种权限。 iOS11访问权限列表 隐私数据对应key值提示语相册(读)NSPhotoLibraryUsageDescription"…

linux make教程,Linux下makefile的一个简单框架

目录结构tree.|-- Makefile-- src|-- Makefile|-- bar| |-- Makefile| -- bar.c-- foo|-- Makefile-- foo.c3 directories, 6 files顶层Makefile# Makefile for top directory# phony target.PHONY: all debug release clean#all: release#debug:$(MAKE) -C src debug#release:…

ubuntu安装ftp_如何在 Ubuntu 20.04 上安装 Webmin

本文最先发布在: 如何在 Ubuntu 20.04 上安装 Webmin​www.itcoder.techWebmin 是一个开源控制面板,它允许你通过简单易用的 Web 界面,就可以管理你的 Linux 服务器。它允许你管理用户,组,磁盘配额,创建文件…

开机启动

shell:startup 转载于:https://www.cnblogs.com/baiquan/p/7691968.html

linux飞行模式自动开机,解决 win10飞行模式 无限自动开关 无法关闭

Linux 中 Vi 编辑器的简单操作Linux 中 Vi 编辑器的简单操作 Vi 编辑器一共有3种模式:命名模式(默认),尾行模式,编辑模式.3种模式彼此需要切换. 一.进入 Vi 编辑器的的命令 vi filename //打开或新 ...WPF好看的进度条实现浅谈(效果有点类似VS2012安装界面)为了界面友好,一般的…