【问题标题】:Why does my python program not run when I double click the .sh file为什么我双击 .sh 文件时我的 python 程序不运行
【发布时间】:2022-08-24 02:42:57
【问题描述】:

操作系统:Ubuntu

设备:Jetson Nano 开发者套件 2GB

我有一个 python 程序,我想通过双击来启动它。这样做的原因是因为我想只用一个触摸屏来控制整个设备。我编写了一个.sh 文件来启动python 程序,但是当我双击它时,终端会打开并立即关闭,当我通过终端手动运行.sh 文件时也会发生同样的事情。

.sh 文件:

#!/usr/bin/env bash
echo \"Starting\"
sleep 1
cd /home/velotech/workspace
python3 detect.py

奇怪的是,当我从终端手动运行命令python3 detect.py 时,程序运行得很好。 我尝试过的事情:

  1. 制作了一个简单的hello.py 程序,这个程序通过双击.sh 文件和终端都可以工作,所以我认为它与我的.sh 文件无关
    print(\'Enter your name:\')
    x = input()
    print(\'Hello, \' + x)
    
    1. 在我的python程序中添加了打印语句,我发现在我导入两个jetson库Jetson.inferencejetson.utils后程序停止工作。 来自detect.py 的代码的 sn-p:
    #!/usr/bin/python3
    import serial
    from gpsZEDF9P.ublox_gps import UbloxGps
    import time
    import threading as thread
    from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox, QLabel, QVBoxLayout, QHBoxLayout, QFrame, QSizePolicy, QComboBox
    from PyQt5 import QtCore
    import sys
    print(\"this gets printed\")
    import jetson.utils
    import jetson.inference
    print(\"This does not\")
    ... rest of the code
    

    当我从终端运行它时,它可以工作,但是当我通过.sh 文件运行它时,它会在第一个打印语句之后关闭终端。所以我的问题是,这可能是什么?

  • 您是否尝试过从终端运行 .sh 文件?应该显示错误
  • 如果我不得不猜测,当您从终端运行它时,您正在使用另一个环境(可能是 venv 或类似的东西)。导入失败,因为此软件包未在系统范围内安装。但同样,只是一个猜测。看看@mousetail 的建议
  • 我尝试在终端中手动运行它,它没有给出任何错误。至少它没有显示任何
  • 但要澄清一下,它仍然会立即打开和关闭终端
  • 如果您将终端设置为在命令完成后保持打开状态,您可以查看那里的输出

标签: python linux shell ubuntu


【解决方案1】:

你在跑步:

python3 detect.py

通过运行它来调试:

python3 -m site
sleep 30

验证相同的$PYTHONPATH / sys.path 在您的终端和双击环境中都使用。 注意 export 该环境变量的新值 如果您发现不匹配, 或使用conda activate myproject 或对应的venv 命令, 因此在两种环境中都可以使用相同的库。

【讨论】:

  • 感谢你的回复。我在 .sh 文件中使用了python3 -m site 并通过终端手动使用,结果是相同的。如果你想要它们,我可以分享它们,但评论中没有足够的字符。
  • 嗯,我一直在赌ModuleNotFoundError,没有这样的运气,好吧。绝对将sleep 30 与您的真实代码一起使用,这样您就可以读取它可能产生的任何堆栈跟踪。在终端中验证 /usr/bin/python3 detect.py./detect.sh 是否都按需要运行。现在使用标准调试技术。就在串行的初始导入之前,插入breakpoint() 行。使用l list 和n next 命令来查看你在失败前能走多远。 ericlippert.com/2014/03/05/how-to-debug-small-programs
  • 好吧,这就是在终端中运行 ./detect.sh 的东西也不起作用
【解决方案2】:

万一其他人遇到这种情况,在我更新库 Jetson Utils 和 Jetson Inference 后,它会发出警告,说不推荐使用 jetson.utils 和 jetson.inference 并改用 jetson_utils 和 jetson_inference。这样做之后,我能够从 .sh 文件运行程序并双击它

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多