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

news2024/12/22 13:04:38

在日常开发中,有时需要在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就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1376079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Python做一个2048小游戏

文章目录 逻辑设计绘图逻辑主循环 逻辑设计 2048的逻辑无非是操作 4 4 4\times4 44的方格,每个方格中有一个数,这些数可以移动,如果两个相同的数字在移动时相撞了,就可以彼此合并。 而这个 4 4 4\times4 44的方格,…

scratch考试“画图”相关考点一网打尽

最近2023年12月17日举行的第15届蓝桥STEMA测评Scratch编程初/中级组编程第3题—六花阵图 在讲解这个题目,可以延申scratch所有的基础图形,学会这篇,碰到关于“图形”类题目基本上都可以搞定 六花阵图 编程实现: 六花阵图。 注…

C#,入门教程(15)——类(class)的基础知识

上一篇: C#,入门教程(14)——字符串与其他数据类型的转换https://blog.csdn.net/beijinghorn/article/details/124004562 物以类聚,凡物必类。 类的使用,须遵循几个简单的原则: (1)能类则类&a…

selenium不自动关闭chrome,selenium hello world

selenium不自动关闭chrome 用visual studio的话,右键,在终端运行。 from selenium import webdriveroptions webdriver.ChromeOptions() options.add_experimental_option("detach", True) driver webdriver.Chrome(optionsoptions) url …

世微大功率 内置2.5A宽电压降压恒流 LED电源驱动车灯IC AP5193

AP5193是一款PWM工作模式,高效率、外围简单、 内置功率MOS管,适用于4.5-100V输入的高精度 降压LED恒流驱动芯片。电流2.5A。AP5193可实现线性调光和PWM调光,线性调光 脚有效电压范围0.55-2.6V. AP5193 工作频率可以通过RT 外部电阻编程来设定&#xff0c…

【Python】编程练习的解密与实战(三)

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《Python | 编程解码》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 🪐1. 初识Python &a…

机器人制作开源方案 | 六足灾后探测机器人

作者:毕钟诚 施钥 范江龙 张莉曼 陈金凤 单位:中国石油大学(北京) 指导老师:许亚岚 孙琳 世纪全球自然灾害频发,灾后探测重建工作十分重要,极端恶劣的现场探测环境,频发的余震甚至…

Unity获取系统语言

大家好,我是阿赵。   在使用Unity引擎做多语言的游戏时,很有可能需要根据用户的手机或者电脑的当前语言来设置游戏的默认语言。   Unity的API里面默认就有可以获取系统语言的方法: Application.systemLanguageUnity的API例子&#xff1a…

Redis 为什么要分16个库

目录 一. 前言 二. 16 个数据库的由来 三. 正解 Redis 数据库概念 四. 集群环境下的 Redis 实例 五. 总结 一. 前言 在实际的项目中,Redis 常被用作缓存、分布式锁、消息队列等的解决方案。但是在搭建好Redis 服务后,Redis 默认创建了16个数据库&am…

基于知识图谱的健康知识问答系统

基于知识图谱的健康知识问答系统 引言数据集与技术选型数据集技术选型 系统功能与实现数据导入与图数据库构建问答任务设计与实现1. 实体提取2. 用户意图识别 前端聊天界面与问答系统 结语 引言 随着互联网的发展,人们对健康知识的需求逐渐增加。为了更方便地获取健…

Windows安全基础:认证基础知识

目录 Windows凭据 Windows访问控制模型 访问令牌: 安全标识符(SID): 安全描述符: 令牌安全防御 1、禁止域管理员异机登录 2、开启“审核进程创建”策略 Windows凭据 SSPI(Security Support Provide…

【PHP】PHP实现与硬件串口交互,接收硬件发送的实时数据

一、前言 目的:借助虚拟串口软件(VSPD)模拟硬件串口发送数据,使用PHP语言实现接收硬件发送的数据。 我这里的需求是连接天平,把天平的称量数据实时的传送到PHP使用。 使用工具:vspd串口调试工具 使用语…

第十三章Filter

第十三章Filter 1.什么是Filter过滤器2.Filter过滤器的基本使用示例3.完整的用户登录和权限检查4.Filter的生命周期5.FilterConfig类6.FilterChain多个过滤器执行的细节7.Filter的拦截路径 1.什么是Filter过滤器 2.Filter过滤器的基本使用示例 现在下面三个都是可以访问的&…

PPT插件-大珩助手-《提取选中的幻灯片》-选中新建

选中新建 提取选中的幻灯片到新的幻灯文稿中。PDF编辑器可以提取指定的页面到新的PDF文档中,PPT没有这个功能,因此开发。 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件,它是一款功能强大且实用的PPT辅助工具,支持Wps Wo…

Docker介绍安装及使用

目录 引言一、什么是Docker?二、Docker的优势三、Docker的架构四、Docker的安装五、Docker的基本使用六、Docker与传统虚拟化的比较七、Docker的应用场景八、总结 引言 在现代的软件开发和部署中,容器化技术已经成为了一种趋势。Docker作为容器化技术的领先者&…

im6ull学习总结(三-五)freetype显示正行字

知识补充 笛卡尔坐标系 这里笛卡尔坐标系就是初高中学的直角坐标系的第一象限 lcd坐标系则不同 这两个坐标系如何转换 观察两个坐标系 点(x,y)的x坐标在两个坐标系中相同,纵坐标(y)存在着yV-yV V是整个屏幕的行数的像…

基于RNN的模型

文本数据是一种典型的具有序列结构的数据,因为文本通常是由一系列的词语或字符组成的序列。每个词语或字符在文本中都有特定的位置和顺序,这种有序的结构对于理解和处理文本的含义至关重要。因此,多数情况下需要使用时间序列建模来完成相应的…

C/C++ 堆排序

个人主页:仍有未知等待探索-CSDN博客 专题分栏:数据结构_仍有未知等待探索的博客-CSDN博客 欢迎大家来指教! 一、前言 今天要介绍的是堆排序。 首先什么是堆?简而言之,堆就是二叉树的数组形式,用数组来存…

【C++】类和对象之匿名对象友元内部类

目录 一、匿名对象 1、基础格式 2、使用场景 二、友元 1、友元函数 2、友元类 三、内部类 1、概念 2、特性 四、拷贝对象时的一些编译器优化 1、函数传参 2、对象返回 一、匿名对象 1、基础格式 【注意】 🟢匿名对象的声明周期只有当前行,进入…

推荐熊猫电竞赏金电竞系统源码

熊猫电竞赏金电竞系统源码,包含APP、H5和搭建视频教程,支持运营级搭建,这套源码是基于ThinkPHPUniaapp框架开发的。 系统是一套完整的电竞平台开发源码,包括赛事管理、用户系统、竞猜系统、支付系统等模块。源码结构清晰&#xff…