Python执行Shell命令的六种方法

 更新时间:2024年09月25日 12:00:49   作者:Kwan的解忧杂货铺  
在 Python 编程中,有时我们需要执行一些 shell 命令来完成特定的任务,比如文件操作、系统调用等,Python 提供了多种内建的方法来执行这些命令,每种方法都有其适用场景和特点,本文给大家介绍了Python执行Shell命令的六种方法,需要的朋友可以参考下

1. os.system()

os.system()是执行 shell 命令的最简单方法。它接受一个字符串作为命令,并在 shell 中执行。返回值是命令的退出状态码,通常 0 表示成功,非 0 表示失败。

import os
result = os.system('ls -l')
print("Exit status:", result)

特点:

  • 简单易用。
  • 无法获取命令的输出或错误信息。
  • 无法处理命令的超时。

2. subprocess.run()

subprocess.run()是推荐的方式,因为它提供了更多的灵活性和功能。它可以执行命令,并且可以捕获输出和错误信息。

import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print("Output:", result.stdout)

特点:

  • 可以捕获输出和错误。
  • 可以设置超时。
  • 可以检查命令的退出状态。

3. subprocess.Popen()

subprocess.Popen()提供了更细粒度的控制,允许执行命令并与之交互。它返回一个Popen对象,可以用于进一步操作。

import subprocess
process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
stdout, stderr = process.communicate()
print("Output:", stdout)
if process.returncode != 0:
    print("Error:", stderr)

特点:

  • 可以实时获取输出和错误。
  • 可以控制进程的输入、输出和错误流。
  • 可以等待或轮询进程的完成。

4. os.popen()

os.popen()用于执行命令并读取输出。它返回一个文件对象,可以像普通文件一样读取。

with os.popen('ls -l') as stream:
    print(stream.read())

特点:

  • 简单易用,适用于只读取输出的场景。
  • 不能捕获错误信息。

5. subprocess.check_output()

subprocess.check_output()用于执行命令并获取输出。如果命令返回非零退出状态码,会抛出异常。

from subprocess import check_output
output = check_output(['ls', '-l'], text=True)
print("Output:", output)

特点:

  • 直接获取命令输出。
  • 如果命令失败,会抛出异常,便于错误处理。

6. subprocess.call()

subprocess.call()执行一个命令并等待其完成,返回命令的退出状态码。

import subprocess
status = subprocess.call(['ls', '-l'])
print("Exit status:", status)

特点:

  • 简单易用,只返回退出状态码。
  • 不能捕获输出或错误信息。

使用建议

在选择执行 shell 命令的方法时,应根据具体需求来决定使用哪种方法。如果需要捕获输出和错误信息,推荐使用subprocess.run()或subprocess.Popen()。如果只是简单地执行命令并获取退出状态,os.system()或subprocess.call()可能更合适。

此外,使用这些方法时,还需要注意异常和错误的处理,特别是当命令失败时。subprocess模块因其强大的控制和灵活性,已成为执行 shell 命令的首选方式。

到此这篇关于Python执行Shell命令的六种方法的文章就介绍到这了,更多相关Python执行Shell命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现标记数组的连通域

    Python实现标记数组的连通域

    这篇文章主要为大家详细介绍了如何通过Python实现标记数组的连通域,文中的示例代码讲解详细,对我们学习Python有一定的帮助,需要的可以参考一下
    2023-04-04
  • 浅谈Python之Django

    浅谈Python之Django

    这篇文章主要介绍了Python3中的Django,小编觉得这篇文章写的还不错,需要的朋友们下面随着小编来一起学习学习吧,希望能够给你带来帮助
    2021-10-10
  • python接入GoogleAuth的实现

    python接入GoogleAuth的实现

    经常会用到GoogleAuth作为二次验证码,本文主要介绍了python接入GoogleAuth的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • 如何使用Python生成Hilbert矩阵

    如何使用Python生成Hilbert矩阵

    这篇文章主要介绍了如何使用Python生成Hilbert矩阵,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Python网络编程之HTTP协议的python应用

    Python网络编程之HTTP协议的python应用

    HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信,这篇文章主要介绍了Python网络编程之HTTP协议的python应用,需要的朋友可以参考下
    2022-11-11
  • django执行数据库查询之后实现返回的结果集转json

    django执行数据库查询之后实现返回的结果集转json

    这篇文章主要介绍了django执行数据库查询之后实现返回的结果集转json,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python字符串运算符详情

    python字符串运算符详情

    这篇文章主要介绍了 python字符串运算符详情,在编程里,用的最多的就是字符串,字符串同时也是各类数据的中转站,下文基于python的相关资料介绍字符串运算符,需要的小伙伴可以参考一下
    2022-04-04
  • 在Python中使用异步Socket编程性能测试

    在Python中使用异步Socket编程性能测试

    异步网络据说能极大的提高网络server的连接速度,所以打算写一个专题,来学习和了解异步网络.因为Python有个非常出名的异步Lib:Twisted,所以就用Python来完成.
    2014-06-06
  • Pycharm配置anaconda环境图文教程

    Pycharm配置anaconda环境图文教程

    这篇文章主要介绍了Pycharm配置anaconda环境图文教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 提升Python编程效率的列表操作方法示例

    提升Python编程效率的列表操作方法示例

    这篇文章主要为大家介绍了提升Python编程效率的列表操作方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论