Python subprocess模块常见用法分析

Python subprocess模块常见用法分析

什么是subprocess模块

Python 的 subprocess 模块可以让我们在 Python 操作系统的命令行 Shell 上运行任何外部命令(Bash, Python, Perl, Grep 等)。subprocess 可以取代 os.system() 和 os.spawn*() 方法。

使用subprocess模块的3种方式

1. subprocess.call()

通过 subprocess.call() 方法启动一个外部程序。

举个例子,如下所示:

import subprocess

subprocess.call(["ls", "-l"])

执行结果会直接输出在终端上。

2. subprocess.run()

subprocess.run() 方法用于子进程创建和控制。其输入、输出以及错误的处理都是高度可控且灵活的。

举个例子:

import subprocess

result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)

print(result.stdout.decode('utf-8'))

执行结果会在程序中输出。

3. subprocess.Popen()

subprocess.Popen() 方法在 Unix 和 Windows 上都有相同的行为。它启动一个新的进程并为其返回一个 Popen 对象。可以通过该 Popen 对象的方法和属性访问进程的 I/O 管道。

举个例子:

import subprocess

p = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)

print(p.communicate()[0].decode('utf-8'))

执行结果将会输出在终端上。

subprocess模块中一些常用的函数

Os.fork()

os.fork() 是一个 Python 实现 UNIX fork() 函数的接口,它并不直接创建子进程,而是创建了一个与当前 Python 解释器完全一样的进程。这个新的进程只是不同于父进程的 pid。由于调用 os.fork() 会返回所在进程(父进程和子进程)的 pid(0 是子进程,否则则是父进程),因此可以通过判断返回的 pid 的值来确定是父进程还是子进程。如果是子进程,你只需要调用 os.exec*() 函数来运行其他代码。

Os.execv()

os.execv(path, args) 用来执行一个可执行程序,执行参数以数组的方式传递。

import os

# 表示要执行的程序
program = '/bin/ls'

# 表示传给程序 ls 的一个参数。这个参数使 ls 以“标准格式”列出所有文件和目录。
option = '-la'

os.execv(program, [program, option])

总结

到这里,subprocess 模块的常见用法和关键知识点已经详细介绍完毕。它在 Python 系统编程中非常常用和非常重要,大家可以通过上面的示例尝试自己编写并运行一遍。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python subprocess模块常见用法分析 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Python大数据之网络爬虫的post请求、get请求区别实例分析

    Python大数据之网络爬虫的post请求、get请求区别实例分析 引言 网络爬虫是一种获取互联网上信息的程序,它可以自动访问、抓取网页上的数据并解析。在网络爬虫中,最常用的两种请求方式是GET和POST。本文旨在探讨这两种请求方式的区别以及如何使用Python进行爬虫。本文的具体内容如下: GET和POST请求区别 使用Python进行GET请求示例 使用…

    云计算 2023年5月18日
    00
  • 如何使用pm2守护你的.NET Core应用程序详解

    如何使用pm2守护你的.NET Core应用程序详解 概述 PM2是一个流行的Node.js应用程序管理器,但它也可以用来监控和管理任何类型的应用程序,包括.NET Core应用程序。PM2拥有自动提供故障恢复、负载均衡机制、进程守护等功能,并且可以通过PM2管理的CLI,轻松地实现任务的启动、停止和重启。 为了演示如何使用PM2来监控和管理.NET Cor…

    云计算 2023年5月17日
    00
  • Blazor框架简介

    让我来为你详细讲解一下Blazor框架的完整攻略。 什么是Blazor框架? Blazor框架是一个由Microsoft提供的Web应用程序框架,它允许使用C#和.Net语言来构建客户端Web应用程序。Blazor可以使Web开发人员在不使用JavaScript的情况下构建现代Web应用程序。 Blazor的核心是使用C#语言编写的WebAssembly,W…

    云计算 2023年5月17日
    00
  • 大数据概述 1、为什么产生大数据技术?3.简述大数据、云计算、物联网、区块链和人工智能的概念和相互关系。

    答:为什么产生了大数据技术,因为对人类生活发展具有重大价值 大数据的价值体现在以下几个方面:1)对大量消费者提供产品或服务的企业可以利用大数据进行精准营销2) 做小而美模式的中小微企业可以利用大数据做服务转型3) 面临互联网压力之下必须转型的传统企业需要与时俱进充分利用大数据的价值 2、为什么要学习大数据技术? 答:1、国家支持  由于大数据应用的重要性明显…

    云计算 2023年4月12日
    00
  • 【云计算】使用nsenter进入Docker容器进行调试

    [nsenter安装使用] cd /tmp curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz tar -zxvf util-linux-2.24.tar.gz cd util-linux-2.24 ./configure –without-…

    云计算 2023年4月11日
    00
  • 边缘计算或将吞掉云计算,玩家们各怀心事谁会胜出?

    边缘计算已成为物联网的重要趋势。最近Micron/Forrester的调查证实了这一趋势:在未来三年中,53%的人认为应该通过边缘计算处理分析复杂的数据集。因此,有人大胆预测,“边缘计算将吞掉云”。 边缘计算备受推崇的原因是其解决了工业物联网实现中的一些关键性问题。通过处理大量的传感器数据,边缘计算可以降低网络上的数据传输成本以及云数据的存储成本。 边缘计算…

    云计算 2023年4月13日
    00
  • 云计算基础 (redhat7介绍及相关配置)

    redhat7简介 新版本的rhel7不再对32位架构的支持 引导程序: GRUB2,比之前的GRUB更强大,GRUB2支持bios,efi和openfiremware GRUB2支持mbr分区表和gpt分区表,GRUB2甚至支持非linux文件系统,如ntfs等 文件系统: 默认使用的文件系统为xfs,xfs是一个高性能的大文件系统,xfs支持在线调整大小…

    云计算 2023年4月10日
    00
  • 云计算openstack共享组件(2)——Memcache 缓存系统

    在大型海量并发访问网站及openstack等集群中,对于关系型数据库,尤其是大型关系型数据库,如果对其进行每秒上万次的并发访问,并且每次访问都在一个有上亿条记录的数据表中查询某条记录时,其效率会非常低,对数据库而言,这也是无法承受的。 缓冲系统的使用可以很好的解决大型并发数据访问所带来的效率低下和数据库压力等问题,缓存系统将经常使用的活跃数据存储在内存中避免…

    云计算 2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部