如何编写sh脚本启动终端运行持续循环Python脚本并解决报错?
解决gnome-terminal运行Python脚本出现status 2错误的方案
首先咱们拆解下child process exited normally with status 2这个错误——它大概率是路径错误或者命令找不到导致的,毕竟你手动运行脚本没问题,说明脚本本身是正常的,问题出在终端启动脚本的配置上。
第一步:排查核心问题点
- 绝对路径要写对:你手动运行的
python home/ubuntu/pyscript.py是相对路径,只有当你的工作目录在根目录时才有效。正确的绝对路径应该是/home/ubuntu/pyscript.py(开头必须加斜杠)。 - 明确Python命令:很多系统里
python默认指向Python2,而你用的可能是Python3,所以尽量用python3代替python,避免出现命令找不到的情况。 - 脚本权限配置:给Python脚本加上执行权限,确保终端能正常运行它:
同时在Python脚本的第一行加上shebang,让系统明确知道用哪个解释器执行:chmod +x /home/ubuntu/pyscript.py#!/usr/bin/env python3
第二步:编写正确的终端启动脚本
gnome-terminal的参数在不同版本里有差异,下面分两种情况给出靠谱的写法:
情况1:新版gnome-terminal(支持--wait参数)
--wait参数会让终端在脚本运行结束后保持打开状态,非常省心。你的启动脚本可以这么写:
#!/bin/bash # 启动单个脚本 gnome-terminal --wait --title="My Python Script" -- python3 /home/ubuntu/pyscript.py # 如果要同时启动多个脚本,每个命令后面加&让它们后台并行运行 gnome-terminal --wait --title="Script 1" -- python3 /home/ubuntu/pyscript1.py & gnome-terminal --wait --title="Script 2" -- python3 /home/ubuntu/pyscript2.py &
情况2:旧版gnome-terminal(不支持--wait)
用bash -c包裹命令,最后加上exec bash强制终端在脚本跑完后不关闭:
#!/bin/bash gnome-terminal --title="My Python Script" -e "bash -c 'python3 /home/ubuntu/pyscript.py; exec bash'" # 多脚本后台启动 gnome-terminal --title="Script 1" -e "bash -c 'python3 /home/ubuntu/pyscript1.py; exec bash'" & gnome-terminal --title="Script 2" -e "bash -c 'python3 /home/ubuntu/pyscript2.py; exec bash'" &
第三步:测试验证
- 先单独在终端里运行启动命令,比如:
确认能正常打开终端、运行脚本并保持窗口后,再把命令放到sh脚本里。gnome-terminal --wait -- python3 /home/ubuntu/pyscript.py - 给你的sh脚本也加上执行权限:
chmod +x start_scripts.sh - 运行sh脚本:
./start_scripts.sh
额外排查技巧
如果还是报错,可以把终端启动命令的输出重定向到日志文件,方便定位问题:
gnome-terminal --wait --title="Debug Log" -- bash -c "python3 /home/ubuntu/pyscript.py 2>&1 | tee /tmp/script_debug.log"
之后查看/tmp/script_debug.log里的具体错误信息就能快速找到问题所在。
内容的提问来源于stack exchange,提问作者Joey de La Moey




