bigger-mai养成计划,subprocess模块(代码片段)

mm-jj mm-jj     2023-03-09     734

关键词:

subprocess模块是python从2.4版本开始引入的模块。主要用来取代 一些旧的模块方法,如os.system、os.spawn*、os.popen*、commands.*等。subprocess通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。

常用方法:

subprocess.call():执行命令,并返回执行状态,其中shell参数为False时,命令需要通过列表的方式传入,当shell为True时,可直接传入命令

示例如下:

技术图片
>>> a = subprocess.call([‘df‘,‘-hT‘],shell=False)
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda2     ext4     94G   64G   26G  72% /
tmpfs        tmpfs    2.8G     0  2.8G   0% /dev/shm
/dev/sda1     ext4    976M   56M  853M   7% /boot

>>> a = subprocess.call(‘df -hT‘,shell=True)
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda2     ext4     94G   64G   26G  72% /
tmpfs        tmpfs    2.8G     0  2.8G   0% /dev/shm
/dev/sda1     ext4    976M   56M  853M   7% /boot

>>> print a
0

技术图片

 

subprocess.check_call():用法与subprocess.call()类似,区别是,当返回值不为0时,直接抛出异常

示例:

技术图片
>>> a = subprocess.check_call(‘df -hT‘,shell=True)
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda2     ext4     94G   64G   26G  72% /
tmpfs        tmpfs    2.8G     0  2.8G   0% /dev/shm
/dev/sda1     ext4    976M   56M  853M   7% /boot
>>> print a
0
>>> a = subprocess.check_call(‘dfdsf‘,shell=True)
/bin/sh: dfdsf: command not found
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/subprocess.py", line 502, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command ‘dfdsf‘ returned non-zero exit status 127
技术图片

 

 

subprocess.check_output():用法与上面两个方法类似,区别是,如果当返回值为0时,直接返回输出结果,如果返回值不为0,直接抛出异常。需要说明的是,该方法在python3.x中才有。

 

subprocess.Popen():

在一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。这个时候我们就需要使用到suprocess的Popen()方法。该方法有以下参数:

args:shell命令,可以是字符串,或者序列类型,如list,tuple。

bufsize:缓冲区大小,可不用关心

stdin,stdout,stderr:分别表示程序的标准输入,标准输出及标准错误

shell:与上面方法中用法相同

cwd:用于设置子进程的当前目录

env:用于指定子进程的环境变量。如果env=None,则默认从父进程继承环境变量

universal_newlines:不同系统的的换行符不同,当该参数设定为true时,则表示使用 作为换行符

 

示例1,在/root下创建一个suprocesstest的目录:

>>> a = subprocess.Popen(‘mkdir subprocesstest‘,shell=True,cwd=‘/root‘)

 

 

示例2,使用python执行几个命令:

技术图片
import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
obj.stdin.write(‘print 1 
‘)
obj.stdin.write(‘print 2 
‘)
obj.stdin.write(‘print 3 
‘)
obj.stdin.write(‘print 4 
‘)
obj.stdin.close()

cmd_out = obj.stdout.read()
obj.stdout.close()
cmd_error = obj.stderr.read()
obj.stderr.close()

print cmd_out
print cmd_error
技术图片

 

也可以使用如下方法:

技术图片
import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
obj.stdin.write(‘print 1 
‘)
obj.stdin.write(‘print 2 
‘)
obj.stdin.write(‘print 3 
‘)
obj.stdin.write(‘print 4 
‘)

out_error_list = obj.communicate()
print out_error_list
技术图片

 

示例3,将一个子进程的输出,作为另一个子进程的输入:

import subprocess
child1 = subprocess.Popen(["cat","/etc/passwd"], stdout=subprocess.PIPE)
child2 = subprocess.Popen(["grep","0:0"],stdin=child1.stdout, stdout=subprocess.PIPE)
out = child2.communicate()

 

 

其他方法:

技术图片
import subprocess
child = subprocess.Popen(‘sleep 60‘,shell=True,stdout=subprocess.PIPE)
child.poll()    #检查子进程状态
child.kill()     #终止子进程
child.send_signal()    #向子进程发送信号
child.terminate()   #终止子进程
技术图片

 

bigger-mai养成计划,前端基础学习之css

在标签上设置style属性:background-color:#2459a2;height:48px;...编写css样式:1.标签的style属性2.写在head里面style标签中写样式-id选择区#i1{background-color:#2459a2;height:48px;}-class选择器******.名称{...}<标签class=‘名称‘></标签>-标签 查看详情

游戏程序猿养成计划

原文地址:http://www.cnblogs.com/clayman/archive/2009/05/17/1459001.html        与玩游戏相比,写游戏要复杂上千万倍,除了须要掌握通用的编程技巧以外,还要有相当的图形学,物理,数学基础,特别是在国内。... 查看详情

bzoj4212--神牛养成计划

正规题解传送门: https://zyqn.tech/?p=3163但是我们发现n只有2000,于是可以建出trie树然后愉快的bitset去搞。直接对于trie上每个节点开个bitset空间爆炸。但是有很多是重复的,所以我们想虚树一样建,每个节点只存一个link指针。... 查看详情

腾讯犀牛鸟「云开发」校园技术布道师养成计划

...从技术向产品的华丽转身?腾讯犀牛鸟云开发校园布道师养成计划之【大咖线上分享】,邀请京东、腾讯等优秀产品经理和工程师,与大 查看详情

游戏程序员养成计划(代码片段)

与玩游戏相比,写游戏要复杂上千万倍,除了需要掌握通用的编程技巧以外,还要有相当的图形学,物理,数学基础,特别是在国内,由于相关资料的缺乏,更是让初学者无从下手。下面总结了一些入门方法和比较容易入手的资料... 查看详情

云原生养成计划进行到哪一步了?

大概两年多前,脑极体的一位编辑离职了,“罪魁祸首”就是一个关于云原生的选题,这直接让他心理防线崩溃了。真不是他太脆弱,绝大多数人看到云原生的复杂内容,恐怕都会怀疑人生。点开云原生计算... 查看详情

你的产品需要一个用户忠诚度养成计划

互联网产品的盈利通常是经过一段时间的用户运营与服务才能产生,因此,没有黏性与留存的App大概率会以失败谢幕。产品同质化导致竞争愈发激烈,想要在移动互联网占据一席之地,提升用户黏性,培养高... 查看详情

bzoj4212神牛的养成计划trie树+可持久化trie树

题目描述Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望......后来,他从某同校女神牛处知道,原来他培育的细胞发生了基因突变,原先决定神牛特征的基因序列都被破坏了,神牛hzwer很生气,但他知道基因突... 查看详情

程序员养成计划-操作系统篇之初识操作系统(代码片段)

系列文章目录例如:初识操作系统文章目录系列文章目录前言一、操作系统的概念1.系统资源的管理者2.向上提供服务(接口等)3.最接近硬件的一层软件二、特征并发共享虚拟异步三、发展与分类手工操作阶段批处理阶段分时... 查看详情

团队作业2——团队计划

...:微信打卡小程序的面向用户是普通群众,主要针对于想养成早起、健身、阅读等一系列习惯的养成者。主要功能有新建打卡、打卡分享、查看个人信息以及个人奖励等。预期用户量:50人2.围绕选题项目内容的真实、可用、有... 查看详情

指导中层管理者日常行动指南

...标,“目标导向”要求管理者首先应关注工作结果。需要养成“全局思维”的习惯,从整体和全局出发,从多个角度看问题,同时需兼顾细节,细节决定成败。轻重缓急需要分清,要灵活使用“时间管理四象限法”,养成“要事... 查看详情

你的产品需要一个用户忠诚度养成计划

...忠诚用户。巧妙的适时推送互动通常新用户到忠诚用户的养成计划会经历如下四个阶段:认知、兴趣、购买、忠诚。不同阶段需差异化制定用户运营策略。例如,在认知阶段,应尽可能让他们多一点了解产品的差异化... 查看详情

养成“凡事预则立”的习惯

制订计划,写成清单  相信笔记,不相信记忆。养成“凡事预则立”的习惯。马丽凯说:“每晚写下次日必须办理的六件要务。挑出了当务之急,便能照表行事,不至于浪费时间在无谓的事情上。”不要订“进度表”,要列“... 查看详情

『c/c++养成计划』c++中的双冒号::名解析(scoperesolutionoperator)(代码片段)

C++中的双冒号::名解析(ScopeResolutionOperator)!文章目录1.访问命名空间中的成员2.访问类中的静态成员3.嵌套类访问4.在类之外定义函数5.当存在具有相同名称的局部变量时,要访问全局变量6.C++模板参数的自动推... 查看详情

张书乐:碎片化超级ip式微!中国式ip养成必须靠“森林”

7月,一连串与超级IP有关的利好纷至沓来。国内网文IP重镇阅文集团即将冲击IPO;迪士尼中国与网易集团宣布合作,除了送来漫威正版漫画外,还计划共同打造中国超级英雄;博易创为宣布获得古龙、梁羽生、温瑞安等宗师级武... 查看详情

使用 python 子进程创建计划任务

...程创建计划任务【英文标题】:creatingscheduledtasksusingpythonsubprocess【发布时间】:2017-05-3107:45:00【问题描述】:我在使用python创建计划任务时遇到问题。执行我的命令后,计划任务的操作部分拆分为参数和路径切片并使其无效。... 查看详情

阅读计划

  大学的时候渐渐的就产生了知识匮乏恐惧症,养成了收藏知识的习惯。但是,我从来都只是个"知识收藏者",然后知识就这样放在仓库里发霉了。  近几日痛定思痛,做人必须一直向前走。学习如逆水行舟,不进则退。人... 查看详情

这21个写sql的好习惯,你要养成呀(代码片段)

...查看执行计划(SQL性能优化)日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。explainselect*fromuserwhereu 查看详情