【问题标题】:Delay execution of Python script after system start up系统启动后延迟执行 Python 脚本
【发布时间】:2018-07-16 20:10:32
【问题描述】:

我有一个 Python 脚本,我需要在启动和问题时运行它 是它抛出一个错误,说“没有名为 xyz 的模块”。我正在使用使用 pip3 安装的外部库。该脚本本身就可以正常工作 但是当我想在启动后立即运行它时出现上述错误。

我该怎么办?我尝试使用 time.sleep(10) 延迟导入库,以防第三方库在启动后需要几秒钟才能加载,但这并没有达到预期的效果。

我在 Raspberry Pi 上使用名为 Raspbian 的基于 Debian 的操作系统运行脚本。我通过将此sudo python3 script.py 添加到 /etc/profile 文件中来配置启动时的执行。

【问题讨论】:

  • 由于某种原因,您的 python 看不到该库。你在使用 conda 吗?
  • 这听起来跟时间无关。
  • 外部库是否安装在虚拟环境中,并且您在启动时运行脚本而不使用虚拟环境?
  • @jason m 不,我不熟悉那个库。
  • 请添加详细信息 - 您如何在启动时运行脚本。包括操作系统,启动时运行的方式,安装模块的方式。我的猜测是您从 cron 作业中运行它;在这种情况下,$PATH 和其他环境变量为空。

标签: python boot


【解决方案1】:

我不明白没有sudopip install 会如何工作。

我所看到的:从 cron 或 /etc/profile 启动时运行的脚本在 root 下运行,而不是在 pi 用户下运行。因此,它们的 $PATH$PYTHONPATH 和您在用户 shell 中的其他环境变量值不同。

由于pip install 设法在没有sudo 的情况下运行,我怀疑您将模块安装到用户特定的目录中,该目录不是root 的Python 环境的一部分。

/etc/profile 行替换为sudo -u pi python3 script.py 可能会有所帮助。

无论它是什么,这都是 Python 环境中已经存在的差异。等待 10 秒“无论发生什么”都无济于事。

【讨论】:

  • 我可能用过sudo我只是不记得了。
  • sudo -u pi python3 script.py 工作! ! !上帝保佑你的伴侣!
  • 您能与我分享-u 的用途吗?这是一个可选参数,但我不熟悉它。
  • Linux 魔法的核心是一本智慧之书:man 命令。在 shell 中键入man sudo 并找到古老的(实际上,大约有半个世纪的历史)知识。或者直接在网上查一下:linux.die.net/man/8/sudo
【解决方案2】:

1 - 下载 anaconda:https://www.anaconda.com/download/

2 - 在 conda 中创建环境:https://conda.io/docs/user-guide/tasks/manage-environments.html

3 - 激活该环境

4 - conda installpip3 install 你的包裹

应该正常工作。

【讨论】:

  • 我希望可以做到这一点,而不必摆弄另一个库。
  • 我真的鼓励您探索 anaconda,因为它为您解决的问题比您现在可能意识到的要多。
猜你喜欢
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 2010-09-06
  • 2015-09-10
相关资源
最近更新 更多