Python执行系统命令的五种方式小结

 更新时间:2024年01月11日 16:53:00   作者:程序无涯海  
在日常开发中,有时需要在Python脚本中执行系统命令,Python有五种方式来执行系统命令(推荐使用第五种),本文为大家整理了这五种方法的具体使用,希望对大家有所帮助

在日常开发中,有时需要在Python脚本中执行系统命令,Python有五种方式来执行系统命令,推荐使用第五种。

python执行系统命令的五种方式

方法1: os.system

这是最简单的方法,适合简单的业务场景,输入为完整命令字符串,命令执行结果输出到控制台;执行成功,返回值为0,失败返回值大于0。

import os
result = os.system("ls -a")

方法2:os.popen

和上面一个类似,输入完整的命令字符串,但是结果不会直接输出,会保存到返回值中,调用read()可以读取结果。

import os
result = os.popen("ls -a")
print(result.read())

方法3:subprocess.run

subprocess.run 是 Python 中 subprocess 模块的一个函数,用于运行子进程。它是 Python 3.5 版本引入的。subprocess.run 提供了一种简单的方式来替代较老的 subprocess.call 函数,更方便地运行子进程并等待其完成。执行命令后,运行结果保存在CompletedProcess类实例中,并返回。更加灵活,可以将命令返回的结果输出到指定的地方,比如输出到控制台、或者日志文件等。

import subprocess

# 定义要运行的命令
command = ["ls", "-l"]

# 使用 subprocess.run 运行命令, 如果不设置stdout参数,会默认输出到控制台
result = subprocess.run(command, stdout=subprocess.PIPE, text=True)

# 输出命令的结果
print("Return code:", result.returncode)
print("Output:\n", result.stdout)

这个例子中,我们定义了一个要运行的命令(列出当前目录的文件和文件夹),然后使用 subprocess.run 来运行它。stdout=subprocess.PIPE 参数指定将子进程的标准输出捕获,而 text=True 参数确保输出是文本形式。subprocess.run 的返回结果是一个 CompletedProcess 对象,包含了运行结果的一些信息,如返回码、标准输出等。请注意,subprocess.run 默认是同步执行的,即会等待子进程执行完成后再返回。如果你需要异步执行或更高级的控制,可以考虑使用 asyncio 模块或 subprocess.Popen 类。

stdout参数也可以设置为外部文件

同理,不设置stderr参数时,外部命令执行失败会直接抛出错误信息,将错误信息输出在控制台;一旦设置,则根据stderr参数进行重定向。

方法4:subprocess.call

subprocess.call 是 subprocess 模块中的一个函数,用于运行命令并等待其完成。它是相对较老的方法,而在较新版本的 Python 中,subprocess.run 被推荐用来替代 subprocess.call。这里不推荐使用也不做介绍了。

方法5:subprocess.Popen

subprocess.Popen 是 subprocess 模块中的一个类,用于创建和管理子进程。与 subprocess.call 和 subprocess.run 不同,subprocess.Popen 提供了更灵活的控制,允许你与子进程的输入、输出进行交互,以及对进程的其他方面进行更详细的配置。

下面是一个简单的使用示例:

import subprocess

# 定义要运行的命令
command = ["ls", "-l"]

# 使用 subprocess.Popen 创建子进程
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

# 等待子进程完成,并获取输出和错误
stdout, stderr = process.communicate()

# 输出子进程的标准输出和标准错误
print("Standard Output:\n", stdout)
print("Standard Error:\n", stderr)

# 获取子进程的返回码
return_code = process.returncode
print("Return code:", return_code)

在这个例子中,我们使用 subprocess.Popen 创建了一个子进程,指定了要运行的命令以及捕获标准输出和标准错误。然后,使用 communicate 方法等待子进程完成,并获取其输出和错误。

subprocess.Popen 的构造函数接受许多参数,允许你自定义子进程的各个方面。例如,你可以指定工作目录、环境变量、文件描述符、标准输入等。更多详细信息可以参考 Python 官方文档:subprocess.Popen。

需要注意的是,与 subprocess.call 和 subprocess.run 不同,subprocess.Popen 不会等待子进程完成,你需要显式调用 communicate 或其他等待方法来等待子进程完成。

总结

如果不知道用哪种就推荐使用subprocess.Popen,简单场景下用os.system就可以了。

以上就是Python执行系统命令的五种方式小结的详细内容,更多关于Python执行系统命令的资料请关注脚本之家其它相关文章!

相关文章

  • Python接口测试环境搭建过程详解

    Python接口测试环境搭建过程详解

    这篇文章主要介绍了Python接口测试环境搭建过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python random从集合中随机选择元素的方法

    python random从集合中随机选择元素的方法

    今天小编就为大家分享一篇python random从集合中随机选择元素的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • pytorch中tensor.expand()和tensor.expand_as()函数详解

    pytorch中tensor.expand()和tensor.expand_as()函数详解

    今天小编就为大家分享一篇pytorch中tensor.expand()和tensor.expand_as()函数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 详解Python获取线程返回值的三种方式

    详解Python获取线程返回值的三种方式

    提到线程,你的大脑应该有这样的印象:我们可以控制它何时开始,却无法控制它何时结束,那么如何获取线程的返回值呢?今天就和大家分享一下一些做法
    2022-07-07
  • python中plot实现即时数据动态显示方法

    python中plot实现即时数据动态显示方法

    这篇文章主要为大家详细介绍了python中plot实现即时数据动态显示方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • python基于queue和threading实现多线程下载实例

    python基于queue和threading实现多线程下载实例

    这篇文章主要介绍了python基于queue和threading实现多线程下载实例,是比较实用的技巧,需要的朋友可以参考下
    2014-10-10
  • Python使用tablib生成excel文件的简单实现方法

    Python使用tablib生成excel文件的简单实现方法

    这篇文章主要介绍了Python使用tablib生成excel文件的方法,结合实例形式分析了tablib模块的相关使用技巧,需要的朋友可以参考下
    2016-03-03
  • 使用PyTorch训练一个图像分类器实例

    使用PyTorch训练一个图像分类器实例

    今天小编就为大家分享一篇使用PyTorch训练一个图像分类器实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python使用super()出现错误解决办法

    python使用super()出现错误解决办法

    这篇文章主要介绍了python使用super()出现错误解决办法的相关资料,对于TypeError: must be type, not classobj的错误进行处理,需要的朋友可以参考下
    2017-08-08
  • Python OpenCV学习之图像滤波详解

    Python OpenCV学习之图像滤波详解

    图像滤波的作用简单来说就是将一副图像通过滤波器得到另一幅图像;明确一个概念,滤波器又被称为卷积核,滤波的过程又被称为卷积;实际上深度学习就是训练许多适应任务的滤波器,本质上就是得到最佳的参数。下面来跟随小编一起深入了解一下图像滤波吧
    2022-01-01

最新评论