python中subprocess模块subprocess.run,subprocess.getoutput,subprocess.Popen、subprocess.call的使用

subprocess可以帮我们执行命令,获取执行结果及返回内容。

1、subprocess.run()

此方法为python3.5版本后的推荐方法,可以获取执行结果、返回内容等一些常用的信息, 满足大部分开发需要。

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)

args: 要执行的命令。类型为str(如 “ls -l”)或包含str的list,tuple等(如 [“ls”, “-l”]), 推荐使用list形式,如果传入的args为str且包含参数,则 必须shell=True,默认为False。

stdin、stdout、stderr: 子进程的标准输入、输出、错误,常用的为stdout,我们可以获取命令执行后的输出内容。

shell:如果该参数为 True,将通过操作系统的 shell 执行指定的命令,默认为False。

timeout:设置命令超时时间。如果命令执行时间超时,子进程将被杀死,并弹出 TimeoutExpired 异常。

check:如果该参数设置为 True,并且进程退出状态码不是 0,则弹 出 CalledProcessError 异常。

encoding: 如果指定了该参数,则 stdin、stdout 和 stderr 可以接收字符串数据,并以该编码方式编码。否则只接收 bytes 类型的数据。

capture_output: 设置为True,将捕获stdout和stderr,从而获执行命令后取返回的内容。


import subprocess

ret = subprocess.run('ls -l', shell=True, capture_output=True, encoding='utf-8')

print('ret.returncode: ',ret.returncode)

print('ret.stdout: ', ret.stdout)
print('ret.stdout.split:', ret.stdout.split())

ret.returncode:  0

ret.stdout:  总用量 0
-rw-r--r--. 1 root root 0 9月  29 11:24 a.py
-rw-r--r--. 1 root root 0 9月  29 11:24 b.py
-rw-r--r--. 1 root root 0 9月  29 11:24 c.py

ret.stdout.split: ['总用量', '0', '-rw-r--r--.', '1', 'root', 'root', '0', '9月', '29', '11:24', 'a.py', '-rw-r--r--.', '1', 'root', 'root', '0', '9月', '29', '11:24', 'b.py', '-rw-r--r--.', '1', 'root', 'root', '0', '9月', '29', '11:24', 'c.py']

ret = subprocess.run(['ls', '-l'], capture_output=True, encoding='utf-8')
print('ret.stdout: ', ret.stdout)

ret.stdout:  总用量 0
-rw-r--r--. 1 root root 0 9月  29 11:24 a.py
-rw-r--r--. 1 root root 0 9月  29 11:24 b.py
-rw-r--r--. 1 root root 0 9月  29 11:24 c.py

2、subprocess.getoutput()

该方法可以直接获取命令执行后的输出内容,返回值为str

import subprocess
cmd = 'ls -l'
ret = subprocess.getoutput(cmd)

print(type(ret))
print(ret)

<class 'str'>

总用量 0
-rw-r--r--. 1 root root 0 9月  29 11:24 a.py
-rw-r--r--. 1 root root 0 9月  29 11:24 b.py
-rw-r--r--. 1 root root 0 9月  29 11:24 c.py

3、subprocess.Popen()

Popen 是 subprocess的核心,底层的创建和管理逻辑都是基于它的。
使用Popen可以实现一些更复杂的逻辑。

import subprocess
cmd = 'ls -l'
ret = subprocess.Popen(cmd, shell=True)
print(ret)

<Popen: returncode: None args: 'ls -l'>

ret.poll()
print(ret)

<Popen: returncode: 0 args: 'ls -l'>

Popen对象的方法:
poll(): 检查进程是否终止,如果终止返回 returncode,否则返回 None。
wait(timeout): 等待子进程终止。
communicate(input,timeout): 和子进程交互,发送和读取数据。
send_signal(singnal): 发送信号到子进程 。
terminate(): 停止子进程,也就是发送SIGTERM信号到子进程。
kill(): 杀死子进程。发送 SIGKILL 信号到子进程。

4、subprocess.call() 及 check_call()
subprocess.call() 为python3.5以前版本使用,与 subprocess.run()用法基本一致,但call()返回的为命令结束码,无法获取更多信息,不推荐使用,现已被run()取代。
subprocess.check_call() 与call()的区别为,check_call()如果命令失败(即 returncode不为0)会主动抛出subprocess.CalledProcessError异常,使用subprocess.run(check=True)可取代subprocess.check_call()。

Original: https://blog.csdn.net/Yy_heng/article/details/127105045
Author: 瓜皮点点
Title: python中subprocess模块subprocess.run,subprocess.getoutput,subprocess.Popen、subprocess.call的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/673649/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 当 AI 邂逅绘画艺术,能迸发出怎样的火花?

    前言 什么是 AI?在你的脑海中可能浮现由一个个神经元堆叠起来的神经网络。那什么是绘画艺术?是达芬奇的《蒙娜丽莎的微笑》,是梵高的《星空夜》、《向日葵》,还是约翰内斯·维米尔的《戴…

    人工智能 2023年5月30日
    076
  • SPSS实现快速聚类(K-Means/K-均值聚类)

    总目录:SPSS学习整理 SPSS实现快速聚类(K-Means/K-均值聚类) 目的 适用情景 数据处理 SPSS操作 SPSS输出结果分析 知识点 目的 利用K均值聚类对数据快速…

    人工智能 2023年6月2日
    0102
  • 文本(图书)分类比赛学习笔记

    赛题任务: 文本分类是根据文本的特征(内容或属性),将给定文本划分到相应的类别中。文本分类已经成为自然语言处理领域非常经典和基础的应用。其中,图书已经成为人类文本语料的重要来源和组…

    人工智能 2023年7月1日
    0101
  • 大数据SQL查询

    本篇主要介绍几种大数据SQL查询引擎及SQL常用语法,包括 Hive、Presto、SparkSQL 的区别介绍,顺带回顾了一些数据库的理论知识。 查询引擎 主要介绍Hive、Pr…

    人工智能 2023年6月4日
    091
  • 机器学习应用篇(五)——决策树分类实例

    机器学习应用篇(五)——决策树分类实例 文章目录 机器学习应用篇(五)——决策树分类实例 * 一、数据集 二、实现过程 – 1 数据特征分析 2 利用决策树模型在二分类…

    人工智能 2023年6月15日
    0107
  • 使用ChatGPT帮我们写一篇论文,最后查重的重复率会是多少?

    使用ChatGPT帮我们写一篇论文,最后查重的重复率会是多少? ChatGpt一经发布就大火,迅速应用在各个领域,尤其在程序圈自动帮我们写代码着实是圈了一大波粉。那么它用在科研领域…

    人工智能 2023年7月30日
    077
  • python爬虫之selenium库,浏览器访问搜索页面并提取信息,及隐藏浏览器运行

    一、 selenium简介 如果链接简单,爬虫可以通过链接用requests库提取页面信息,如爬取豆瓣top250影片信息,链接简单易懂。参考:爬取豆瓣top250影片信息 但如果…

    人工智能 2023年7月4日
    080
  • python 图像增强算法实现

    使用python编写了共六种图像增强算法:1)基于直方图均衡化2)基于拉普拉斯算子3)基于对数变换4)基于伽马变换5)限制对比度自适应直方图均衡化:CLAHE6)retinex-S…

    人工智能 2023年6月18日
    069
  • 【nacos】5.3 nacos 更新mqtt配置,自动加载连接EMQX

    接上一节问题: 问题 1.1 如果修改一些需要预加载的配置呢,如下场景是否不用启动服务器能立即生效? 修改连接Mqtt服务器,并订阅 修改连接TCP服务器 修改TCP客户端端口 修…

    人工智能 2023年6月28日
    085
  • V2X-Hub,车路协同云控平台

    为什么会关注到这个项目呢? 车路协同系统里,有一个云控平台的概念,之前设计了一个版本的云控平台,后来又从底层重新思考云控平台,以及关注和了解到国内开源社区的OpenV2X云控平台解…

    人工智能 2023年6月11日
    0150
  • pytorch神经网络

    输入-加工-输出 PyTorch 是Torch 在 Python上的衍生.因为Torch是一个使用Lua语言的神经网络库,Torch 很好用,但是 Lua又不是特别流行,所有开发团…

    人工智能 2023年7月13日
    095
  • python读取与保存图片的exif信息

    图片的exif文件格式中保存了很多信息,比如GPS经纬度,高度,焦距等信息。 在图片的属性中可以看到这些信息: 我们可以使用python来进行exif数据的读取和保存。 1. 首先…

    人工智能 2023年6月20日
    089
  • 数据分析——AB实验

    ( 一 ) AB实验概念 AB实验通俗讲就是在线上可以切出一部分用户(降低风险),完全随机的分成两组或多组(确保人群一致),一组保持现有的方案叫对照组,另外一组使用改进的方案叫实验…

    人工智能 2023年6月11日
    0109
  • r语言逻辑回归_R语言机器学习 | 3 逻辑回归

    1 基础知识 逻辑回归(logistic regression)是线性回归的推广,属于 广义线性模型(generalized linear model)的一种。 所谓广义线性回归,…

    人工智能 2023年6月18日
    0123
  • 三层神经网络实现手写数字图像分类

    数据集采用MNIST。MNIST 数据集包含 4 个文件,分别是训练集图像、训练集 标记、测试集图像、测试集标记。每个样本都由灰度图像(即单通道图像)及其 标记组成,图像大小为 2…

    人工智能 2023年7月13日
    090
  • unet模型及代码解析

    什么是unet 一个U型网络结构,2015年在图像分割领域大放异彩,unet被大量应用在分割领域。它是在FCN的基础上构建,它的U型结构解决了FCN无法上下文的信息和位置信息的弊端…

    人工智能 2023年6月16日
    0180
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球