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人人网登录应用实例,是一个非常实用的技巧,需要的朋友可以参考下
    2014-09-09
  • Python关于OS文件目录处理的实例分享

    Python关于OS文件目录处理的实例分享

    在本篇文章里小编给大家整理的是一篇关于Python关于OS文件目录处理的实例内容,有兴趣的朋友们可以学一下。
    2021-05-05
  • Python3.6 Schedule模块定时任务(实例讲解)

    Python3.6 Schedule模块定时任务(实例讲解)

    下面小编就为大家带来一篇Python3.6 Schedule模块定时任务(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • python全栈知识点总结

    python全栈知识点总结

    在本篇文章里小编给大家整理了关于python全栈的知识点以及学习路线的总结,需要的朋友们参考下。
    2019-07-07
  • python 对类的成员函数开启线程的方法

    python 对类的成员函数开启线程的方法

    今天小编就为大家分享一篇python 对类的成员函数开启线程的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python中的sys模块和os模块

    python中的sys模块和os模块

    这篇文章主要介绍了python中的sys模块和os模块,sys模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数,os模块提供了多数操作系统的功能接口函数,下文更多相关内容需要的小伙伴可以参考一下
    2022-03-03
  • Python实现随机生成图片验证码详解

    Python实现随机生成图片验证码详解

    这篇文章主要介绍了如何利用Python生成随机的图片验证码 并打印验证码的值,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起试试
    2022-01-01
  • Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例

    Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例

    这篇文章主要介绍了Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式,结合实例形式分析了Python文件读写相关的指针、打开方式等相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • python实现求特征选择的信息增益

    python实现求特征选择的信息增益

    这篇文章主要为大家详细介绍了python实现求特征选择的信息增益,可以同时适用于二值离散型和连续型的属性,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • 解决tensorflow打印tensor有省略号的问题

    解决tensorflow打印tensor有省略号的问题

    今天小编就为大家分享一篇解决tensorflow打印tensor有省略号的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02

最新评论