我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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,从而获执行命令后取返回的内容。

例:

# 当前文件夹下有 a.py、b.py、c.py 三个文件,我们执行 “ls -l”来获取一下文件信息import subprocess# args传入str的方式 有参数传入需shell=True,encoding可以指定capture_output(stdin、stdout、stderr)的编码格式ret = subprocess.run('ls -l', shell=True, capture_output=True, encoding='utf-8')# ret.returncode 返回int类型,0 则执行成功print('ret.returncode: ',ret.returncode)# ret.stdout 返回str类型,命令执行后的输出内容,可以按实际需求处理str, 这里简单做个splitprint('ret.stdout: ', ret.stdout)print('ret.stdout.split:', ret.stdout.split())# 输出结果ret.returncode:  0ret.stdout:  总用量 0-rw-r--r--. 1 root root 0 929 11:24 a.py-rw-r--r--. 1 root root 0 929 11:24 b.py-rw-r--r--. 1 root root 0 929 11:24 c.pyret.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']# args传入list的方式, 输出结果是一样的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 929 11:24 a.py-rw-r--r--. 1 root root 0 929 11:24 b.py-rw-r--r--. 1 root root 0 929 11:24 c.py

2、subprocess.getoutput()

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

import subprocesscmd = 'ls -l'  ret = subprocess.getoutput(cmd)print(type(ret))print(ret)# 输出结果为<class 'str'>总用量 0-rw-r--r--. 1 root root 0 929 11:24 a.py-rw-r--r--. 1 root root 0 929 11:24 b.py-rw-r--r--. 1 root root 0 929 11:24 c.py

3、subprocess.Popen()

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

import subprocesscmd = 'ls -l'ret = subprocess.Popen(cmd, shell=True)print(ret)# 输出  在使用ret.wait()或ret.poll()之前是获取不到 returncode 的<Popen: returncode: None args: 'ls -l'># poll() 检查进程是否终止,如果终止返回 returncode,否则返回 None。ret.poll()print(ret)# 输出 此时可以获取到ret.returncode<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()。

来源地址:https://blog.csdn.net/Yy_heng/article/details/127105045

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一文搞懂Python中subprocess模块的使用

subprocess是子流程,即进程的意思,该模块可以启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。本文将和大家聊聊subprocess模块的使用,需要的可以参考一下
2022-11-21

Python中win32com模块的使用

本文主要介绍了Python中win32com模块的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-29

python中os模块和sys模块的使用详解

本文主要介绍了python中os模块和sys模块的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-21

Python中concurrent.futures模块的使用方法

这篇文章主要介绍了Python中concurrent.futures模块的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、说明标准库为我们提供了concurrent
2023-06-15

Python中的binascii模块如何使用

这篇文章主要介绍“Python中的binascii模块如何使用”,在日常操作中,相信很多人在Python中的binascii模块如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的binas
2023-06-30

Python中的xlrd模块使用整理

目录1.简述:2.xlrd模块的基本操作2.1打开excel文件获取book对象2.2获取xlrd.book.Book 对象中的所有sheet名称2.3获取xlrd.book.Book对象中的所有sheet对象2.4判断xlrd.book.
2022-06-02

python中decimal模块的具体使用

本文主要介绍了python中decimal模块的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-29

Python中的Array模块怎么使用

这篇“Python中的Array模块怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中的Array模块怎么
2023-07-06

Python中的logging模块怎么使用

这篇文章主要介绍“Python中的logging模块怎么使用”,在日常操作中,相信很多人在Python中的logging模块怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的logging
2023-07-06

python中sys模块的使用方法

小编给大家分享一下python中sys模块的使用方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;4.twisted
2023-06-14

python中的random模块怎么使用

在Python中,可以使用random模块来生成随机数。以下是一些常见的random模块的使用方法:生成一个随机整数:import random# 生成一个在指定范围内的随机整数random_number = random.randint
python中的random模块怎么使用
2024-03-04

详解Python中httptools模块的使用

httptools 是一个 HTTP 解析器,它首先提供了一个 parse_url 函数,用来解析 URL。这篇文章就来和大家聊聊它的用法吧,感兴趣的可以了解一下
2023-03-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录