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

如何通过Python的subprocess获取Shell脚本输出并控制窗口显示

问题描述

我有一个简单的Shell脚本testScript.sh,内容如下(注:原脚本中echo后的;;属于语法错误,已修正):

#! /bin/bash
echo "Hello"
echo "Full Name: $1"
echo "Age: $2"

我在Jupyter Notebook中通过以下Python代码调用该脚本:

import subprocess
filePath = 'testScript.sh'
arg1 = 'John Doe'
arg2 = 2
subprocess.run([filePath, arg1, str(arg2)], shell=True, check=True)

脚本可正常运行,返回结果为:

CompletedProcess(args=['testScript.sh', 'John Doe', '2'], returncode=0)

但运行时会弹出命令行窗口,输出仅闪显一秒即关闭。想知道如何将Shell脚本的输出打印到Python中,或如何阻止命令行窗口关闭以查看输出?


解决方案1:捕获脚本输出并在Python中打印

subprocess.run默认不会捕获脚本的标准输出,只需添加参数即可将输出捕获到Python中,同时还能避免命令行窗口弹出(视系统环境而定):

修改后的Python代码:

import subprocess
filePath = 'testScript.sh'
arg1 = 'John Doe'
arg2 = 2
# 捕获标准输出,text=True将输出转为字符串格式
result = subprocess.run(
    [filePath, arg1, str(arg2)],
    check=True,
    capture_output=True,
    text=True
)
# 打印脚本输出内容
print("脚本输出:")
print(result.stdout)
# 若需查看错误输出,可取消下方注释
# print("错误输出:")
# print(result.stderr)

注:如果是Windows环境下调用bash脚本,建议明确指定bash解释器路径,比如将命令改为['bash', filePath, arg1, str(arg2)],同时可以去掉shell=True,避免不必要的窗口弹出。

解决方案2:阻止命令行窗口关闭

如果希望保留命令行窗口并查看输出,可在Shell脚本末尾添加暂停命令,让窗口等待用户操作后再关闭:

修改后的testScript.sh:

#! /bin/bash
echo "Hello"
echo "Full Name: $1"
echo "Age: $2"
# 等待用户按下任意键后退出窗口
read -p "按任意键继续..."

运行脚本时,命令行窗口会保留输出内容,直到你按下任意按键才会关闭。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:26:28