Python subprocess.popen示例:高效地运行和控制其他进程

Python subprocess模块让我们可以和操作系统进行交互,也可以让我们轻松地运行和控制其他进程。subprocess模块提供了一系列的函数和类,可以用来处理进程的创建、运行、输入、输出和信号等。其中,subprocess.Popen()是最强大和常用的函数之一,这个函数可以创建一个子进程,在新的进程中运行一个外部命令,把输入和输出连接到当前进程。比如,当需要执行其他编程语言的程序或者在Python中运行系统命令的时候,我们通常会使用subprocess模块。

一、subprocess模块中的常见方法

在学习subprocess.Popen()方法之前,我们先来了解一些subprocess模块中常见的函数和类。

1.subprocess.run()

subprocess.run()方法是Python 3.5以后新增的方法,它是subprocess模块的高层次的接口,可以用来代替Popen、call的组合使用,该方法可以获取子进程的输出以及运行结果代码,还可以设置timeout。

import subprocess

result = subprocess.run(["ls", "-l"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(result.returncode)
print(result.stdout.decode("utf-8"))
print(result.stderr.decode("utf-8"))

这个例子中,我们使用了subprocess.run()方法执行了Linux系统中的ls -l命令,并通过stdout和stderr输出了结果。这个例子中的returncode、stdout、stderr对象都是返回的bytes类型,需要使用decode()方法转换成字符串。

2.subprocess.call()

subprocess.call()方法是一个简单的方法,可以运行一个命令行命令,然后等待该命令完成。

import subprocess

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

这个例子中,我们使用了subprocess.call()方法执行了Linux系统中的ls -l命令,执行完之后,会返回值0。

3.subprocess.Popen()

subprocess.Popen()方法可以用来创建一个新的进程和子进程,可以把进程的输出与输入都连接到 Python,然后就可以和 Python 进行交互了。下面是一个例子。

import subprocess

process = subprocess.Popen(["ls", "-la"], stdout=subprocess.PIPE)
print(process.stdout.read())

这个例子中,我们使用了subprocess.Popen()方法执行了Linux系统中的ls -la命令,并通过stdout输出了结果。

二、subprocess.Popen()的常用参数

subprocess.Popen()方法会根据传入的参数启动一个新的进程,和Linux命令行一样,subprocess.Popen()也支持很多参数,下面是一些常用的参数:

1.args参数

args参数是一个字符串或者一个列表,指定需要执行的进程和传入的参数,如果是字符串类型,则需要把参数用空格隔开。

2.stdin、stdout和stderr参数

stdin、stdout和stderr参数分别代表子进程的标准输入、标准输出和标准错误输出。在Popen对象中,这三个属性本质是文件描述符,可以使用文件操作的方式进行修改(比如文件读写)。

3.shell参数

shell参数是一个布尔值参数,如果为True表示在Unix系统中使用shell或者Windows系统中使用cmd.exe的方式运行命令。

4.close_fds参数

close_fds参数用于关闭在创建子进程时不应该保持打开的文件描述符。文件描述符是一个整型数,指向内核中打开文件的一个记录。打开文件将会消耗掉系统资源,如果打开的文件过多,则会导致系统资源的浪费。该选项默认值为 True,建议不要更改。

三、subprocess.Popen()常见实战操作

1.子进程执行Linux命令行

在Python中执行Linux命令非常容易,下面是一个例子。

import subprocess

result = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = result.communicate()
print(out.decode("utf-8"))
print(err.decode("utf-8"))

这个例子中,我们使用了Popen启动了一个子进程来执行ls -l命令,然后使用communicate()方法获取了它的输出结果和错误信息。这个例子演示了如何在Python中执行Linux命令,同时把输出和错误输出保存了下来。

2.打开一个文本文件进行读取和写入

下面是一个例子,演示了如何打开一个已经存在的文本文件,并把输出写入到该文件中。

import subprocess

with open("out.txt", "w") as outfile, open("err.txt", "w") as errfile:
    result = subprocess.Popen(["ls", "-l"], stdout=outfile, stderr=errfile)
    result.communicate()

这个例子中,我们用Popen创建了一个子进程来执行ls -l命令并把结果输出到out.txt文件中,然后把错误信息输出到err.txt文件中。

3.使用环境变量和管道

下面是一个例子,演示了如何使用环境变量和管道。

import subprocess

process = subprocess.Popen(["echo $HOME"], stdout=subprocess.PIPE, shell=True)
print(process.communicate()[0].decode("utf-8"))

这个例子中,我们用Popen创建了一个子进程来执行echo $HOME命令来获取$HOME环境变量的值,然后再使用communicate()方法获取它的输出结果。

总结

subprocess模块是Python中非常强大的模块之一,在使用Python语言编写脚本或应用程序时,经常要用到执行系统命令或调用第三方程序的情况,此时subprocess模块就非常有用。本文介绍了subprocess模块中的一些常用方法和参数,希望对读者有所帮助。

原创文章,作者:ILFC,如若转载,请注明出处:https://www.506064.com/n/142419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ILFCILFC
上一篇 2024-10-11 11:41
下一篇 2024-10-11 11:41

相关推荐

  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29

发表回复

登录后才能评论