如何通过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
相关产品推荐
相关产品推荐

