Python程序中调用外部命令与脚本的实现方法

竹里
竹里
发布时间:2026-10-12| 2人浏览过
原创

在Python开发中,经常需要调用系统命令或第三方工具完成自动化任务。本文详细说明如何利用os.system快速执行简单命令,并重点演示subprocess模块的标准输出捕获、字符串解析及异步非阻塞运行机制,附带Windows磁盘空间检测实例,帮助开发者掌握跨进程交互的核心技巧。

一、使用os.system执行基础命令

os.system是Python内置模块提供的最简接口,适用于只需触发程序运行且无需获取返回结果的场景。例如调用已安装的外部下载工具:

import os
cmd = r'd:\tools\wget http://mirrors.sohu.com/nginx/nginx-1.13.9.zip'
os.system(cmd)
print('安装完毕')

该方式存在两个显著限制:一是采用同步阻塞模式,Python脚本必须等待外部命令彻底执行完毕后才会继续向下运行;二是无法获取目标程序的执行结果或页面内容。若需突破这些限制,应切换至subprocess模块。

二、使用subprocess模块实现精准控制

第1步:准备执行环境

部分系统级命令(如Windows下的fsutil)可能需要管理员权限才能正常读取数据。建议在具备对应权限的控制台环境中运行脚本,以避免因权限不足导致的拒绝访问错误。

第2步:同步捕获命令输出

通过Popen类创建子进程,将stdout和stderr重定向至管道,即可在Python端直接读取原始字节流:

from subprocess import PIPE, Popen
proc = Popen(
    'fsutil volume diskfree c:',
    stdin=None,
    stdout=PIPE,
    stderr=PIPE,
    shell=True
)
outinfo, errinfo = proc.communicate()

communicate()方法会返回包含标准输出与标准错误内容的字节串。由于终端默认输出为机器码,需按系统编码进行解码。

第3步:解析与处理返回结果

解码后的字符串可通过文本分割提取关键数值。以磁盘剩余空间计算为例:

# 注意返回内容为bytes,需指定gbk解码(适配中文Windows)
outinfo = outinfo.decode('gbk')
errinfo = errinfo.decode('gbk')

# 将结果按行拆分
outputList = outinfo.splitlines()

# 提取首尾字段并进行清洗替换
free = int(outputList[0].split(':')[1].replace(',', "").strip().split(' ')[0])
total = int(outputList[1].split(':')[1].replace(',', "").strip().split(' ')[0])

percent = free / total
print('使用百分比:{:.2%}'.format(percent))
if percent < 0.1:
    print('!!剩余空间告急!!!')
else:
    print('剩余空间足够')

该方法依赖特定语言的格式排版,若系统区域设置更改导致fsutil输出列顺序变化,需相应调整索引切片位置。

第4步:异步执行非阻塞任务

当仅需后台触发任务而不需等待完成时,可省略通信阻塞逻辑,让外部进程独立运行:

from subprocess import Popen
proc = Popen(
    args='wget http://mirrors.sohu.com/nginx/nginx-1.13.9.zip',
    shell=True
)
print('让他下载,我们先作其他的的事情')

配合shell=True可直接调用系统Shell解释器,但需注意避免拼接不可信的用户输入以防止命令注入风险。

三、简要总结

掌握os.system的轻量级调用与subprocess的精细管道控制,能够满足绝大多数跨程序交互需求。根据是否需要实时输出、是否允许阻塞主线程,合理选择进程管理方式即可。

以上就是Python程序中调用其他程序的详细实现方法,更多关于Python进程管理与命令行操作技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。