You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何编写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脚本加上执行权限,确保终端能正常运行它:
    chmod +x /home/ubuntu/pyscript.py
    
    同时在Python脚本的第一行加上shebang,让系统明确知道用哪个解释器执行:
    #!/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'" &

第三步:测试验证

  1. 先单独在终端里运行启动命令,比如:
    gnome-terminal --wait -- python3 /home/ubuntu/pyscript.py
    
    确认能正常打开终端、运行脚本并保持窗口后,再把命令放到sh脚本里。
  2. 给你的sh脚本也加上执行权限:
    chmod +x start_scripts.sh
    
  3. 运行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

火山引擎 最新活动