【问题标题】:Using Cron to run a python script written in Spyder IDE使用 Cron 运行在 Spyder IDE 中编写的 python 脚本
【发布时间】:2018-03-16 23:07:40
【问题描述】:

我使用 Spyder 作为 Anaconda 中的 IDE 编写了我的第一个 python 脚本。耶!该脚本从谷歌金融中提取数据并将其通过电子邮件发送给我。在 Spyder 中运行时,它工作正常。

现在我想安排该脚本在一天中的特定时间运行。因此,经过研究,我尝试使用以下语法将作业设置为在 Cron 中运行:

15 12 * * * users/paul/desktop/pythonscript.py

我以为这会在 12:15 运行脚本,但没有任何反应。

我尝试通过在 IDLE 中打开脚本并运行它或从终端运行它来进行试验,但我无法让其中任何一个工作,因为它告诉我没有导入任何模块。

那么...谁能告诉我如何安排一个用 Spyder 编写的 python 脚本在特定时间运行?

谢谢!

【问题讨论】:

  • 看起来你正在使用python3。那正确吗?请参阅下面的更新答案。您需要在 cron 中指定 PATH。
  • 另外,由于这是您第一次使用 cron,您应该知道在打开的 shell 中您不会看到任何输出。该作业在后台运行。如果您的脚本没有输出文件或创建日志文件,那么您的标准输出将丢失。如果您正在寻找脚本是否正在运行的验证,则需要将输出发送到日志文件。见superuser.com/questions/122246/…

标签: python cron anaconda scheduling spyder


【解决方案1】:

目标 - 我使用 Spyder(conda base)创建了 python 脚本(Scipt X),我想在 cron 中安排它。 解决方案 - 我再创建一个脚本(脚本 Y),写在下面的代码

预先准备:- 通过在终端中键入以下命令切换到 conda env

  1. conda activate //切换到 conda env
  2. which python //在我的例子中检查 python 版本(~anaconda3/bin/python)

脚本 Y 中的以下代码:

import os,import subprocess
subprocess.call("~anaconda3/bin/python <FULL SCRIPT X PATH>")

我在 crontab 中称之为(脚本 Y)。 crontab 入口

min hour date month week ~anaconda3/bin/python <full path to Script Y>

您现在可以在 crontab 中安排 spyder 脚本了。

【讨论】:

    【解决方案2】:

    您需要在 Cron 中指定 PATH 变量并确保其中包含 python3。 (从您的 cmets 来看,您使用的是 python3,请确保您知道您使用的是 2 还是 3,只需键入 python 通常默认为 python 2)您可以使用以下命令进行正常编辑:

    crontab -e 
    

    然后在调用工作之前添加 python 的完整路径。编辑:此路径需要是您的 anaconda 环境 python 的路径(以避免系统上其他版本的 python 之间的兼容性问题)。

    PATH=path/to/anaconda/env/bin #you need to look this up
    
    15 12 * * * python3 users/paul/desktop/pythonscript.py
    

    How to get CRON to call in the correct PATHs

    如果你的 PATH 中没有包含包含 anaconda 环境 python3 的文件夹,它将不会像在 spyder 中那样运行。如果你想知道蟒蛇版本的 python 在哪里,在 bash 中输入:

    conda info --envs
    conda env list #or you could try this
    

    如果您的命令包含对您的 anaconda 环境 python 的调用,那么您不需要 shebang in 蟒蛇脚本.py。如果您不想在 crontab 的命令中包含对 python 的调用,请在第一行的 python 脚本中包含 shebang。

    这些可能有用: run a crontab job using an annaconda env(见第二个答案)

    https://conda.io/docs/user-guide/tasks/manage-environments.html(管理 conda 环境的指南)

    【讨论】:

    • 我一定错过了什么。我把那个shebang放进去并将路径更改为20 9 * * * /Library/Frameworks/Python.framework/Versions/3.6/bin/python3/Users/lindseymiller/Desktop/Notify2.py的完整路径,它仍然会赢不工作。语法错误?
    • 如果你想这样做,你需要在两者之间留一个空格。 yourLongPathToPython(确保有空格)yourPathToYourScript。
    • 如果您不想输入 python3 的完整路径,也可以定义 PATH 变量(参见上面的示例)。这样 bash 将在 PATH 中指定的文件夹中查找并尝试找到 python3。无论哪种方式都应该有效,但如果您选择定义 PATH,请确保准确复制间距(bash 在变量定义中特别使用空格)
    • 还需要注意的是,如果您这样做,则不需要 shebang。当你调用 python3 时,你给它你的脚本作为输入,它运行脚本。当您使脚本可执行时,定义 shebang 很有用。但那是另一回事。让我们尝试以这种方式为您工作。
    • 仍然无法正常工作,我完全复制了语法:PATH=/Library/Frameworks/Python.framework/Versions/3.6/bin/python3 40 9 * * * python3 Users/lindseymiller/Desktop/Notify2。 py 会不会是我在 Spyder 中写了 .py 脚本?这是否禁止我以这种方式运行它?
    【解决方案3】:

    首先检查你的脚本是否包含python shebang。

    #!/usr/local/bin/python
    

    上面将是你的 python 环境的路径,这将运行得很好或改变你的 cron 语法,并告诉它调用 python 来运行你的文件和

    使用您的文件的完整路径,例如 /home/users/.....

    15 12 * * * python users/paul/desktop/pythonscript.py
    

    【讨论】:

    • 谢谢,但还是不行。我在 python 中有这个 shebang:#!/usr/bin/env python3 并且 cron 选项卡中的完整路径是 python /Users/paul/desktop/pythonscript.py。知道我做错了什么吗?
    • 尝试添加用户 15 12 * * * root python /Users/paul/desktop/pythonscript.py
    猜你喜欢
    • 1970-01-01
    • 2011-05-26
    • 2011-05-28
    • 1970-01-01
    • 2016-08-14
    • 2016-10-22
    • 2015-03-16
    • 1970-01-01
    相关资源
    最近更新 更多