当前位置: 首页 > 编程笔记 >

Python subprocess库的使用详解

韩博厚
2023-03-14
本文向大家介绍Python subprocess库的使用详解,包括了Python subprocess库的使用详解的使用技巧和注意事项,需要的朋友参考一下

介绍

使用subprocess模块的目的是用于替换os.system等一些旧的模块和方法。

运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。

subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用。另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。

导入模块

>>> import subprocess

命令执行call()

执行由参数提供的命令,把数组作为参数运行命令。其功能类似于os.system(cmd)。

>>> subprocess.call(['ls','-l')

其中参数shell默认为False。

在shell设置为True时,可以直接传字符串:

>>> subprocess.call('ls -l',shell=True)

获得返回结果check_output()

call()是不返回显示的结果的,可以使用check_ouput()来获得返回的结果:

>>> result = subprocess.check_output(['ls','-l'],shell=True)
>>> result.decode('utf-8')

进程创建和管理Popen类

subprocess.popen代替os.popen。可以创建一个Popen类来创建进程和进行复杂的交互。

创建不等待的子进程

import subprocess

child = subprocess.Popen(['ping','-c','4','www.baidu.com'])
print('Finished')

添加子进程等待

import subprocess

child = subprocess.Popen(['ping','-c','4','www.baidu.com'])
child.wait() # 等待子进程结束
print('Finished')

添加了wait()后,主进程会等待子进程结束再执行下面的语句。

子进程文本流控制

标准输出重定向

import subprocess

child = subprocess.Popen(['ls','-l'],stdout=subprocess.PIPE)    #将标准输出定向输出到subprocess.PIPE
print(child.stdout.read()) 

使用stdin与其配合使用:

import subprocess

child1 = subprocess.Popen(['cat','/etc/passwd'],stdout=subprocess.PIPE)
child2 = subprocess.Popen(['grep','root'],stdin=child1.stdout,stdout=subprocess.PIPE)

print child2.communicate()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Python的argparse库使用详解,包括了Python的argparse库使用详解的使用技巧和注意事项,需要的朋友参考一下 argparse是python标准库里面用来处理命令行参数的库 命令行参数分为位置参数和选项参数: 位置参数就是程序根据该参数出现的位置来确定的 如:[root@openstack_1 /]# ls root/    #其中root/是位置参数 选项参数是

  • 本文向大家介绍详解Python time库的使用,包括了详解Python time库的使用的使用技巧和注意事项,需要的朋友参考一下 一、时间获取函数 二、时间格式化 三、时间进度条 测量时间:perf_counter() 返回系统运行时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。 产生时间:sleep(secs) 推迟调用线程的运行 secs:休眠时间;可以是浮点

  • 本文向大家介绍Python 中Pickle库的使用详解,包括了Python 中Pickle库的使用详解的使用技巧和注意事项,需要的朋友参考一下 在“通过简单示例来理解什么是机器学习”这篇文章里提到了pickle库的使用,本文来做进一步的阐述。 那么为什么需要序列化和反序列化这一操作呢?   1.便于存储。序列化过程将文本信息转变为二进制数据流。这样就信息就容易存储在硬盘之中,当需要读取文件的时候,

  • 本文向大家介绍详解Django中的form库的使用,包括了详解Django中的form库的使用的使用技巧和注意事项,需要的朋友参考一下 Django带有一个form库,称为django.forms,这个库可以处理我们本章所提到的包括HTML表单显示以及验证。 接下来我们来深入了解一下form库,并使用她来重写contact表单应用。 Django的newforms库 在Django社区上会经常看到

  • 本文向大家介绍Django数据库类库MySQLdb使用详解,包括了Django数据库类库MySQLdb使用详解的使用技巧和注意事项,需要的朋友参考一下 Django项目要操作数据库,首先要和数据库建立连接,才能让程序中的数据和数据库关联起来进行数据的增删改查操作 Django项目默认使用mysqldb模块进行和mysql数据库之间的交互操作。 下面看下Django进行数据库操作的步骤: 1. 修改

  • 本文向大家介绍Python运维开发之psutil库的使用详解,包括了Python运维开发之psutil库的使用详解的使用技巧和注意事项,需要的朋友参考一下 介绍 psutil能够轻松实现获取系统运行的进程和系统利用率。 导入模块 获取系统性能信息 CPU信息 使用cpu_times()方法获取CPU的完整信息: 获取单项数据,例如用户user的CPU时间比: 获取CPU的个数: 内存信息 获取物理

  • 本文向大家介绍docker私有仓库的搭建和使用详解,包括了docker私有仓库的搭建和使用详解的使用技巧和注意事项,需要的朋友参考一下 1.下载仓库镜像 2.创建私有仓库容器-d表示后台启动 3.防火墙解除5000端口限制 4.验证私有仓库是否启动成功 http://192.3.8.12:5000/v2 5.打包镜像 6.把打包好的镜像上传到私有仓库 这个问题可能是由于客户端采用https,doc

  • 本文向大家介绍Swift网络请求库Alamofire使用详解,包括了Swift网络请求库Alamofire使用详解的使用技巧和注意事项,需要的朋友参考一下 前言 Alamofire是一个使用Swift开发的网络请求库,其开发团队是AFNetworking的原团队。它语法简洁,采用链式编程的思想,使用起来是相当的舒服。本质是基于NSURLSession进行封装。接下开我们就进入实战,开始学习Alam