广告位联系
返回顶部
分享到

python学习之subprocess模块介绍

python 来源:互联网 作者:佚名 发布时间:2024-12-08 22:33:29 人浏览
摘要

subprocess功能:创建子进程,并连接他的输入、输出和错误管道,获取其返回状态(可以在python代码中执行操作系统级别的命令) 1. subprocess.run() 功能:执行args参数所表示的命令,等待命令结束

subprocess功能:创建子进程,并连接他的输入、输出和错误管道,获取其返回状态(可以在python代码中执行操作系统级别的命令)

1. subprocess.run()

功能:执行args参数所表示的命令,等待命令结束,并返回一个CompletedProcess类型对象

1.1. 参数介绍

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

  • args:表示要执行的命令,必须是字符串或字符串参数列表
  • Stdin, stdout, stderr:子进程的标准输入、输出和错误,其值可以是subprocess.PIPE, subporcess.DEVNULL, 一个已经存在的文件描述符、已经打开的文件对象或者None
  • timeout:设置命令超时时间,若超时,子进程将被杀死,并弹出TimeoutExpired异常
  • check:若该参数设为true,且进程退出状态码不是0,则弹出CalledProcessError异常
  • encoding:若指定了该参数,则stdin,stdout,stderr可以接收字符串数据,并以该编码方式编码,否则只能接收bytes类型的数据
  • shell:若该参数为True,将通过操作系统的shell执行指定命令

1.1.1 subprocess.CompletedProcess

run()的返回值,表示一个进程结束了。CompletedProcess类有下面这些属性

  • args:启动进程的参数,通常是一个列表或字符串
  • returncode:进程结束状态返回码,0表示成功状态
  • stdout:获取子进程的stdout,通常为bytes类型序列,None表示没有捕获值。
  • stderr:获取子进程的错误信息,通常为bytes类型序列,None表示没有捕获值
  • check_returncode():检查返回码,若返回状态码不为0,弹出calledProcessError异常

1.1.2 subprocess.DEVNULL

特殊值,用于传递给stdout, stdin和stderr参数

1.1.3 subprocess.PIPE

管道,可传递给stdout, stdin, stderr参数

1.1.4 subprocess.STDOUT

特殊值,可传递给stderr参数,表示stdout和stderr合并输出,可以使用read(), readline(), readlines()等方法

1.1.5 args与shell

  • args参数可以接收一个字符串,也可以传递字符串分割列表
  • shell参数默认为False,设置为True的时候表示使用操作系统的shell执行命令,当args为字符串时,必须指定shell=True;当args是个列表的时候,shell保持默认的False

1.2. 获取执行结果

run()方法返回的是一个completedProcess类型对象,而非执行结果。如果要获取命令执行的结果或信息,在调用run()方法的时候,需要指定stdout=sunprocess.PIPE,结果将会以bytes类型保存在stdout属性中

1.2.1. 交互式输入

run()方法的stdin参数可以接收一个文件句柄,如下

1

2

3

4

import subprocess

file=open("d:\\1.txt")

ret=subprocess.run('python',stdin=file,stdout=subprocess.PIPE,shell=True)

print(ret.stdout)

2. subprocess.Popen()

其用法和参数与run()基本类同,可创建和管理子进程,但是它的返回值是一个Popen对象,而不是CompletedProcess对象

2.1 参数介绍

1

class subprocess.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=False, startupinfo=None, creationflags=0,restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None)

  • args:shell命令,可以是字符串或者字符序列
  • bufsize:缓冲区大小,默认-1,用于创建标准流的管道对象
    • 0:不使用缓冲区
    • 1:表示行缓冲,仅当universal_newlines=True时可用,即文本模式
    • 正数:表示缓冲区大小
    • 负数:表示使用系统默认的缓冲区大小。
  • stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
  • preexec_fn:只在 Unix 平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
  • shell:如果该参数为 True,将通过操作系统的 shell 执行指定的命令。
  • cwd:用于设置子进程的当前目录。
  • env:用于指定子进程的环境变量。如果 env = None,子进程的环境变量将从父进程中继承。

2.1.1 subprocess.Popen可调用的方法

  • poll():检查进程是否终止
  • wait():等待子进程终止
  • communicate(input, timeout):和子进程交互,发送和读取数据
    • input的数据类型必须是字节串,若universal_newlines=True,则input参数的数据类型必须是字符串
    • 该方法返回一个元组(stdout_data, stderr_data),字节串或字符串
    • timeout指定的秒数后该进程还没结束,将会抛出TimeoutExpired异常
  • send_signal(signal):发送信号到子进程
  • terminate():停止子进程,即发送SIGTERM信号到子进程
  • kill():杀死子进程,发送SIGKILL

2.2 实例

Popen对象的stdin, stdout, stderr是三个文件句柄,可以像文件那样读写,通过subprocess.stdin.write()可以输入数据,subprocess.Popen().stdout.read()可以输出数据

1

2

3

4

5

import subprocess

s=subprocess.Popen('python3',stdout=subprocess.PIPE,stdin=subprocess.PIPE,shell=True)

s.stdin.write(b'import os\n')

s.stdin.write(b'print(os.environ)')

s.stdin.close()

3. subprocess常用函数

函数 使用说明
subprocess.run() 执行args参数所表示的命令,执行完成后返回CompletedProcess
subprocess.call() 执行指定的命令,返回命令执行状态,类似os.system(cmd)
subprocess.check_call() 等价于subprocess.run(…,check=True)
subprocess.check_output() 执行指定命令,状态码为0则返回命令执行结果,否则抛出异常
subprocess.getoutput() 接收字符串格式的命令,执行并返回结果,类似于os.popen(cmd).read()和commands.getoutput(cmd)
subprocess.getstatusoutput() 执行cmd命令,返回元组(命令执行状态,命令执行结果输出)

附:python subprocess.run() 执行py脚本并等待该脚本执行完成

要使用 subprocess.run() 执行 Python 脚本并等待脚本执行完成,可以按照以下方式进行:

1

2

3

4

5

6

7

8

9

import subprocess

 

# 脚本的文件路径

script_path = "/path/to/your/script.py"

 

# 使用 subprocess.run() 执行脚本

subprocess.run(["python", script_path], capture_output=True, text=True)

 

# 程序会在这里等待脚本执行完成

在上述代码中:

  • "python" 是要执行的命令。
  • [script_path] 是命令的参数,即你要执行的Python脚本的路径。
  • capture_output=True 参数表示捕获子进程的标准输出和标准错误流。返回的结果将会是一个 CompletedProcess 对象,其 stdout 和 stderr 属性分别包含标准输出和标准错误的内容。
  • text=True 参数表示将捕获的输出以文本形式返回(在Python 3.7及以上版本有效)。

subprocess.run() 会阻塞当前进程,直到被调用的命令执行完成。执行完成后,程序才会继续执行后续的代码。如果你不想捕获输出,可以去掉 capture_output 参数。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Python元组超详细介绍(小白篇)
    元组(Tuple)是Python中的一种内置数据类型,用于存储多个有序的元素。与列表不同,元组是不可变的,这意味着一旦创建,元组中的元素就
  • Python中jieba模块使用方法介绍
    在中文自然语言处理(NLP)中,分词是基本而关键的步骤。由于中文没有空格,分词可以帮助我们更好地理解和处理文本。jieba是一个流行的
  • Python中魔法参数 *args 和 **kwargs使用介绍

    Python中魔法参数 *args 和 **kwargs使用介绍
    在Python编程中,函数的灵活性是其强大之处之一。其中,*args 和 **kwargs 是实现函数参数可变性的重要工具。 无论我们是Python初学者还是经验
  • python学习之subprocess模块介绍
    subprocess功能:创建子进程,并连接他的输入、输出和错误管道,获取其返回状态(可以在python代码中执行操作系统级别的命令) 1. subproce
  • Python中使用pip换源的流程
    在Python开发过程中,我们经常需要安装各种第三方库。pip是Python的包管理工具,用于安装和管理Python库。然而,由于网络原因,有时访问默
  • 使用Python中wordcloud库绘制词云图的教程

    使用Python中wordcloud库绘制词云图的教程
    词云图(Word Cloud)是数据可视化中常用的一种技术,通过将文字以不同的大小、颜色和方向排列,以展示文本数据中词汇的频次和重要性。
  • Python文件批量处理操作的实现
    在日常的开发和数据处理过程中,我们可能会遇到需要对大量文件进行批量操作的场景。比如,批量重命名文件、批量移动文件、批量修改
  • python的三种等待方式及优缺点介绍
    一、调用方式 1.强制等待 调用time模块,使用time.sleep(n),强制等待n秒 2.隐式等待 implicitly_wait(n),设置隐式等待最大时间n秒,等待元素加载完
  • 利用Python爬虫精准获取淘宝商品

    利用Python爬虫精准获取淘宝商品
    在数字化时代,数据的价值日益凸显,尤其是在电子商务领域。淘宝作为中国最大的电商平台之一,拥有海量的商品数据,对于研究市场趋
  • PIL图像与数组之间转换的使用二十j

    PIL图像与数组之间转换的使用二十j
    getpixel 如果想对图像进行细致地处理,那么操作像素是必不可少的一步。在Image类中,通过getpixel可以得到图像在某个坐标位置处的像素值,
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计