在CentOS 7中使用Python 3执行系统命令

1. 使用os.system()

这个方法简单直接,但它不返回命令的输出,只返回命令的退出状态。如果你只需要知道命令是否成功执行,这个方法就足够了。

python 复制代码
import os

cmd = "ls -l"
status = os.system(cmd)

if status == 0:
    print("Command executed successfully")
else:
    print("Command execution failed")

2. 使用subprocess.run()

这是从Python 3.5开始推荐的方式,它提供了更多的功能和灵活性。特别是,它允许你捕获命令的输出。

python 复制代码
import subprocess

try:
    result = subprocess.run(["ls", "-l"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    print("stdout:", result.stdout)
except subprocess.CalledProcessError as e:
    print("Error executing command:", e)

3. 使用subprocess.Popen()

当你需要更细粒度的控制,比如非阻塞读取输出或写入输入到进程,subprocess.Popen()是一个更复杂但更强大的选择。

python 复制代码
import subprocess

process = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
stdout, stderr = process.communicate()

print("stdout:", stdout)
if process.returncode != 0:
    print("stderr:", stderr)

注意事项

  • 在CentOS 7上,默认可能不会安装Python 3。你可能需要手动安装Python 3及其pip包管理器。
  • 当执行需要特定权限的命令时(例如,操作系统级别的任务),确保你的Python脚本以合适的用户权限运行。
  • 对于一些复杂的命令,特别是那些涉及管道(|)、重定向(><)等Shell特性的命令,可能需要通过shell=True参数传递给subprocess.run()subprocess.Popen(),或者将命令作为一个字符串而不是列表传递。但要小心使用shell=True,因为它可能会引入安全风险,特别是当命令字符串来自不可信的输入时。

在使用这些方法时,请确保你的Python脚本考虑到了CentOS 7环境的特点,包括任何潜在的路径和权限问题。

相关推荐
m0_736919101 小时前
C++代码风格检查工具
开发语言·c++·算法
喵手1 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
2501_944934731 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy1 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
黎雁·泠崖2 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_763472462 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
肖永威3 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos
TechWJ3 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
枷锁—sha3 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
abluckyboy3 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法