💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
- 导航
- 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
- 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
- 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
- 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
- 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
- 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
博客目录
- 1. `os.system()`
- 特点:
- 2. `subprocess.run()`
- 特点:
- 3. `subprocess.Popen()`
- 特点:
- 4. `os.popen()`
- 特点:
- 5. `subprocess.check_output()`
- 特点:
- 6. `subprocess.call()`
- 特点:
- 使用建议
在 Python 编程中,有时我们需要执行一些 shell 命令来完成特定的任务,比如文件操作、系统调用等。Python 提供了多种内建的方法来执行这些命令,每种方法都有其适用场景和特点。
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 命令的首选方式。
觉得有用的话点个赞
👍🏻
呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙