You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中屏蔽os.system调用bash脚本的输出?

问题:屏蔽Python调用外部bash脚本的输出

我正在用Python的os.system运行bash脚本,但这个脚本会向控制台输出大量内容导致刷屏。需要仅保留Python自身的打印内容(示例中的text1和text2),且无法修改bash脚本,如何实现?

示例代码

bash脚本(blue.sh)

#!/bin/bash
touch "SomeFile.dat"
echo "Spam Spam Spam Spam"
echo "Spam Spam Spam Spam"
echo "Spam Spam Spam Spam"
echo "Spam Spam Spam Spam"

原Python代码

import os
print("Job starting") #text1
os.system("./blue.sh")
print("Job finished") #text2

解决方案

方法1:通过shell重定向屏蔽输出(基于os.system)

直接在os.system的命令后添加输出重定向,将标准输出和错误输出都导向系统空设备/dev/null:

import os
print("Job starting") #text1
# 将stdout和stderr都重定向到/dev/null
os.system("./blue.sh > /dev/null 2>&1")
print("Job finished") #text2
  • 说明:> /dev/null 丢弃标准输出(stdout),2>&1 将标准错误(stderr)重定向到和标准输出相同的位置,实现所有输出屏蔽。

方法2:使用subprocess模块(官方推荐)

Python官方推荐用subprocess替代os.system,它能更灵活地控制外部进程的输入输出:

import subprocess
print("Job starting") #text1
# 丢弃stdout和stderr
subprocess.run(["./blue.sh"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
print("Job finished") #text2

如果需要兼容Python 3.6之前的版本,可使用subprocess.call:

import subprocess
print("Job starting") #text1
subprocess.call(["./blue.sh"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
print("Job finished") #text2
  • 说明:subprocess.DEVNULL 等价于系统的/dev/null,直接丢弃对应输出;使用列表形式的命令参数无需依赖shell,更安全(避免潜在的shell注入风险)。

内容的提问来源于stack exchange,提问作者brownser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:50:44