python subprocess run 和 Popen 的一些使用和注意事项

news2024/11/26 8:36:06

文章目录

      • 一、run
      • 二、Popen

NAME
subprocess - Subprocesses with accessible I/O streams

MODULE REFERENCE
https://docs.python.org/3.9/library/subprocess
The following documentation is automatically generated from the Python
source files. It may be incomplete, incorrect or include features that
are considered implementation detail and may vary between Python
implementations. When in doubt, consult the module reference at the
location listed above.

from subprocess import Popen, PIPE
from subprocess import run

python IDE 的提示反而看不懂, 因此需要了解一下内部实现细节更好理解和使用。

请添加图片描述

一、run

run() 方法是对 Popen() 方法的封装.

subprocess.run() 模块可供参考的初学者教程:https://www.dataquest.io/blog/python-subprocess/

run(*popenargs, input=None, capture_output=False, timeout=None, check=False, **kwargs)
    
    # 带参数运行命令, 并返回一个 CompletedProcess 实例.
    Run command with arguments and return a CompletedProcess instance.
    
    # 返回的实例将包含属性: process.args, ret_code, stdout, stderr.
    # 默认情况, stdout 和 stderr 不捕获, 值为 None; 传入参数 stdout=PIPE 和 stderr=PIPE 可以捕获它们.
    # capture_output=True 可以捕获, 但与 stdin/stdout 不能同时使用, 抛出 ValueError 异常
    # 程序出错时, stdout 将为 None, stderr 将包含错误信息.
    # 仅设置 capture_output=True 在subprocess出错时, subprocess 和父进程都不会停止, 即该行代码后续还会运行
    # 注意此时 result=run(...) 的 result 是 CompletedProcess 的内容
    The returned instance will have attributes args, returncode, stdout and
    stderr. By default, stdout and stderr are not captured, and those attributes
    will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
    
    # check=True 且 ret_code!=0 时, 抛出 CalledProcessError 异常
    # (含 ret_code, process.args, output(None), stderr(若选择捕获))
    # 注意此时 result=run(...) 的 result 是 None, 因为还没执行完提前抛出异常了, 该行后续代码不执行
    # CalledProcessError(1, ['ffmpeg', '-f', 'dshow', '-i', 'video="USB Video"', '-frames:v', '1', 'sn.jpg'])
    # 设置 check=True 后 subprocess 中任何错误都将导致 subprocess 和父进程停止
    If check is True and the exit code was non-zero, it raises a
    CalledProcessError. The CalledProcessError object will have the return code
    in the returncode attribute, and output & stderr attributes if those streams
    were captured.
    
    # timeout is not None, 且进程耗时过长, 抛出 TimeoutExpired 异常, 停止 subprocess和父进程
    If timeout is given, and the process takes too long, a TimeoutExpired
    exception will be raised.
    
    # 可选参数 input 传递字节/字符串给 subprocess.Popen() 的 stdin. 
    # 意味着 input 和 stdin 参数不能同时使用, 抛出 ValueError 异常.
    There is an optional argument "input", allowing you to
    pass bytes or a string to the subprocess's stdin.  If you use this argument
    you may not also use the Popen constructor's "stdin" argument, as
    it will be used internally.
    
    # 默认所有 communication 都是以 bytes 进行的, 因此 input/stdout/stderr 都将是 bytes.
    # 设置以下任一参数将触发 Text 模式: text/encoding/errors/universal_newlines
    # 文本(Text) 模式下, input 应该是 str, stdout/stderr 将会是根据区域编码(或根据encoding参数)进行解码后的字符串
    By default, all communication is in bytes, and therefore any "input" should
    be bytes, and the stdout and stderr will be bytes. If in text mode, any
    "input" should be a string, and stdout and stderr will be strings decoded
    according to locale encoding, or by "encoding" if set. Text mode is
    triggered by setting any of text, encoding, errors or universal_newlines.
    
    # 其他参数与 Popen 构造函数相同
    The other arguments are the same as for the Popen constructor.

二、Popen

class Popen(builtins.object)
 |  Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=None, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, user=None, group=None, extra_groups=None, encoding=None, errors=None, text=None, umask=-1)
 |  
 |  Execute a child program in a new process.在新进程中执行子程序。
 |  
 |  For a complete description of the arguments see the Python documentation.
 |  有关参数的完整描述,请参阅 Python 文档。
 |  
 |  Arguments: 参数
 |    args: A string, or a sequence of program arguments.
 |          一个字符串,或一系列程序参数。
 |  
 |    bufsize: supplied as the buffering argument to the open() function when
 |        creating the stdin/stdout/stderr pipe file objects
 |             在创建 stdin/stdout/stderr 管道文件对象时作为缓冲参数提供给 open() 函数
 |  
 |    executable: A replacement program to execute.
 |                要执行的替换程序。
 |  
 |    stdin, stdout and stderr: These specify the executed programs' standard
 |        input, standard output and standard error file handles, respectively.
 |                           它们分别指定了执行程序的标准输入、标准输出和标准错误文件句柄。
 |  
 |    preexec_fn: (POSIX only) An object to be called in the child process
 |        just before the child is executed.
 |               (仅限 POSIX)在执行子进程之前要在子进程中调用的对象。
 |  
 |    close_fds: Controls closing or inheriting of file descriptors.
 |               控制文件描述符的关闭或继承。
 |  
 |    shell: If true, the command will be executed through the shell.
 |           如果为真,命令将通过 shell 执行。
 |  
 |    cwd: Sets the current directory before the child is executed.
 |         在执行子进程之前设置当前目录。
 |  
 |    env: Defines the environment variables for the new process.
 |         为新进程定义环境变量。
 |  
 |    text: If true, decode stdin, stdout and stderr using the given encoding
 |        (if set) or the system default otherwise.
 |   如果为 true,则使用给定的编码(如果已设置)或系统默认值对 stdin、stdout 和 stderr 进行解码。
 |  
 |    universal_newlines: Alias of text, provided for backwards compatibility.
 |                        文本的别名,用于向后兼容。
 |  
 |    startupinfo and creationflags (Windows only)
 |  
 |    restore_signals (POSIX only)
 |  
 |    start_new_session (POSIX only)
 |  
 |    group (POSIX only)
 |  
 |    extra_groups (POSIX only)
 |  
 |    user (POSIX only)
 |  
 |    umask (POSIX only)
 |  
 |    pass_fds (POSIX only)
 |  
 |    encoding and errors: Text mode encoding and error handling to use for
 |        file objects stdin, stdout and stderr.
 |    编码和错误: 用于文件对象标准输入、标准输出和标准错误的文本模式编码和错误处理。
 |  
 |  Attributes:
 |      stdin, stdout, stderr, pid, returncode
 |      标准输入, 标准输出, 标准错误, 进程号, 返回码
 |  
 |  Methods defined here: 定义的方法如下
 |  
 |  __del__(self, _maxsize=9223372036854775807, _warn=<built-in function warn>)
 |  
 |  __enter__(self)
 |  
 |  __exit__(self, exc_type, value, traceback)
 |  
 |  __init__(self, args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=None, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, user=None, group=None, extra_groups=None, encoding=None, errors=None, text=None, umask=-1)
 |      Create new Popen instance.创建新的 Popen 实例。
 |  
 |  __repr__(self)
 |      Return repr(self).
 |  
 |  communicate(self, input=None, timeout=None)
 |      Interact with process: Send data to stdin and close it.
 |      Read data from stdout and stderr, until end-of-file is
 |      reached.  Wait for process to terminate.
 |      与进程交互:将数据发送到标准输入并关闭它。
 |      从 stdout 和 stderr 读取数据,直到到达文件末尾。 等待进程终止。
 |      
 |      The optional "input" argument should be data to be sent to the
 |      child process, or None, if no data should be sent to the child.
 |      communicate() returns a tuple (stdout, stderr).
 |      可选的 "input" 参数应该是要发送给子进程的数据,如果没有数据要发送给子进程,则为 None。
 |      communicate() 返回一个元组(stdout,stderr)。
 |      
 |      By default, all communication is in bytes, and therefore any
 |      "input" should be bytes, and the (stdout, stderr) will be bytes.
 |      If in text mode (indicated by self.text_mode), any "input" should
 |      be a string, and (stdout, stderr) will be strings decoded
 |      according to locale encoding, or by "encoding" if set. Text mode
 |      is triggered by setting any of text, encoding, errors or
 |      universal_newlines.
 |      默认情况下,所有通信都以字节为单位,因此任何 "input" 都应该是字节,(stdout, stderr)也是。
 |      如果在文本模式下(由 self.text_mode 指示),任何 "input" 都应该是一个字符串,并且
 |      (stdout, stderr) 将是根据语言环境编码解码的字符串,或者如果已设置则通过“编码”解码。
 |      通过设置文本、编码、错误或 universal_newlines 中的任何一个来触发文本模式。
 |  
 |  kill = terminate(self)
 |  
 |  poll(self)
 |      Check if child process has terminated. Set and return returncode
 |      attribute.
 |      检查子进程是否终止. 设置并返回返回码属性.
 |  
 |  send_signal(self, sig)
 |      Send a signal to the process.
 |      给进程发信号.
 |  
 |  terminate(self)
 |      Terminates the process.
 |      终止进程.
 |  
 |  wait(self, timeout=None)
 |      Wait for child process to terminate; returns self.returncode.
 |      等待子进程终止; 返回状态码

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

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

相关文章

【事故总结】Mybatis-Wrapper导致的生产事故

近期遭遇了一次生产环境的严重告警&#xff0c;涉及慢接口和CPU过载。经过排查&#xff0c;发现问题根源在于一段使用MyBatis的查询代码。当传入空列表作为查询条件时&#xff0c;MyBatis会忽略该条件&#xff0c;导致全表扫描&#xff0c;进而引发系统资源耗尽和频繁的Full GC…

浅谈技术架构的演进过程

前言 最近在学习Redis、Doctor相关技术知识&#xff0c;它们与分布式系统有着很大的关系。 而对于分布式系统&#xff0c;它本身就是随着业务的不断推进&#xff0c;技术架构不断演进而得到发展和实现的。而所谓的分布式系统&#xff0c;实际上就是想办法引入更多的硬件资源&am…

OpenHarmony之分布式软总线

分布式软总线是多设备终端的统一基座&#xff0c;为设备间的无缝互联提供了统一的分布式通信能力&#xff0c;能够快速发现并连接设备&#xff0c;高效地传输任务和数据。 分布式软总线实现近场设备间统一的分布式通信管理能力&#xff0c;提供不区分链路的设备间发现连接、组网…

消息队列基础知识

学一点&#xff0c;整一点&#xff0c;基本都是综合别人的&#xff0c;弄成我能理解的内容 https://blog.csdn.net/BenJamin_Blue/article/details/125946812 https://blog.csdn.net/qq_46119575/article/details/129794304 &#x1f4cc;导航小助手&#x1f4cc; 生产者-消费者…

14.12-常见的对于非阻塞复制的误解

常见的对于非阻塞复制的误解 1&#xff0c;非阻塞赋值和$display1.1&#xff0c;RTL案例1.2&#xff0c;功能实现1.3&#xff0c;解释误解 2&#xff0c;#0延时赋值2.1&#xff0c;RTL案例2.2&#xff0c;功能实现2.3&#xff0c;解释误解 3&#xff0c;对同一变量进行多次非阻…

家用洗地机哪个牌子好?2024年洗地机热门品牌测评

随着科技水平的不断发展&#xff0c;人们对家居设备的要求也在不断提高&#xff0c;追求省时省力的家务工具变得越来越受欢迎。家用洗地机的出现满足了这一需求&#xff0c;其洗拖吸一体的特点使其成为现代家庭的必备神器。 使用家用洗地机可以极大地提高地面清洁的效率&#…

因数据侵权,纽约时报起诉OpenAI、微软

12月28日&#xff0c;金融时报消息&#xff0c;因为非法使用数百万篇新闻数据训练ChatGPT等生成式AI产品&#xff0c;《纽约时报》正在起诉OpenAI和微软。 这是第一家起诉生成式AI厂商的著名媒体。《纽约时报》没有公布具体数额&#xff0c;但希望获得数十亿美元的赔偿金。 O…

两向量叉乘值为对应平行四边形面积--公式推导

两向量叉乘值为对应平行四边形面积--公式推导 介绍 介绍

PowerShell Instal 一键部署gitea

gitea 前言 Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs 分支而来…

Ubuntu22.04-安装后Terminal无法调出

参考&#xff1a; Ubuntu20.04 终端打开不了的问题排查_ubuntu终端打不开-CSDN博客 https://blog.csdn.net/u010092716/article/details/130968032 Ubuntu修改locale从而修改语言环境_ubuntu locale-CSDN博客 https://blog.csdn.net/aa1209551258/article/details/81745394 问…

2023年度总结:技术旅程的杨帆远航⛵

文章目录 职业规划与心灵成长 ❤️‍&#x1f525;我的最大收获与成长 &#x1f4aa;新年Flag &#x1f6a9;我的技术发展规划 ⌛对技术行业的深度思考 &#x1f914;祝愿 &#x1f307; 2023 年对我来说是一个充实而令人难以忘怀的一年。这一年&#xff0c;我在CSDN上发表了 1…

有效解决vcruntime140_1.dll丢失的问题,关于vcruntime140_1.dll文件

今天在使用电脑的过程中突然提示找不到vcruntime140_1.dll&#xff0c;出现这样的提示后&#xff0c;想要在打开程序时&#xff0c;有再一次提示找不到vcruntime140_1.dll&#xff0c;不能在正常打开程序&#xff0c;那么有什么办法可以解决vcruntime140_1.dll丢失的问题呢&…

用python画最简单的图案,用python画小猫简单代码

本篇文章给大家谈谈用python画小猫简单100行代码&#xff0c;以及用python画最简单的图案&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 Source code download: 本文相关源码 from turtle import * #两个函数用于画心 defcurvemove():for i in range(200): …

Java基础02-Java编程基础

文章目录 变量&#xff08;Variables&#xff09;局部变量和成员变量局部变量&#xff08;Local Variables&#xff09;成员变量&#xff08;Instance Variables&#xff09; 标识符&#xff08;Identifiers&#xff09;八种基本数据类型原始数据类型&#xff08;Primitive Dat…

【网络安全 | CTF】pure_color

该题考察图片隐写 给出一张图片如下&#xff1a; 典型的图片隐写&#xff0c;运行stegsolve即可&#xff1a; 如图&#xff1a; flag{true_steganographers_doesnt_need_any_tools}

《新传奇》期刊投稿论文发表

《新传奇》杂志是经国家新闻出版总署批准、面向国内外公开发行的综合性社科期刊&#xff0c;由湖北省文联主管&#xff0c;湖北今古传奇传媒集团有限公司主办&#xff0c;湖北优秀期刊。本刊旨在坚守初心、引领创新&#xff0c;展示高水平研究成果&#xff0c;支持优秀学术人才…

Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中

目录 默认样式 修改默认字体颜色&#xff1a; 修改鼠标悬浮/选中字体颜色&#xff1a; 去掉长分割线并修改下划线颜色 完整代码 默认样式 注意事项&#xff1a;一定要在 <style scoped>不然修改的样式不会覆盖生效 修改默认字体颜色&#xff1a; ::v-deep .el-tabs__…

三分钟学完科研论文常用统计图

统计分析的结果通常包括统计图和统计表。统计图是一种用图形表示数据的方式&#xff0c;它能够直观地展示数据的分布、趋势和关系。科研论文中常见的统计图包括条形图、饼图、折线图、散点图等。这些图形可以帮助人们快速地理解和分析数据&#xff0c;找出其中的规律和特征。今…

【LangChain】与文档聊天:将OpenAI与LangChain集成的终极指南

欢迎来到人工智能的迷人世界&#xff0c;在那里&#xff0c;人与机器之间的通信越来越模糊。在这篇博客文章中&#xff0c;我们将探索人工智能驱动交互的一个令人兴奋的新前沿&#xff1a;与您的文本文档聊天&#xff01;借助OpenAI模型和创新的LangChain框架的强大组合&#x…

Hbase详解

Hbase 概念 base 是分布式、面向列的开源数据库&#xff08;其实准确的说是面向列族&#xff09;。HDFS 为 Hbase 提供可靠的底层数据存储服务&#xff0c;MapReduce 为 Hbase 提供高性能的计算能力&#xff0c;Zookeeper 为 Hbase 提供稳定服务和 Failover 机制&#xff0c;…