【问题标题】:Python "print" function not working with crontabPython \"print\" 函数不适用于 crontab
【发布时间】:2023-02-15 05:12:57
【问题描述】:

我试图在基于 linux 的操作系统中定期运行一些 python 脚本,经过快速研究后,我发现 crontab 是一种经典的方法。我是该命令的新手,所以我确保牢记常见的现有recommendations,并且(谨慎地)我决定首先使用一个非常简单的 python 代码,myscript.py

#!/usr/bin/python3

print("If you see this, your periodic code ran OK!")

'cron 表'(crontab -l) 文件如下所示,它应该每分钟运行一次myscript.py(我想快速测试一下):

* * * * * /usr/bin/python3 /home/my_user_folder/Desktop/test/myscript.py

几秒钟过去了,脚本到达了第一分钟……什么也没发生。到 ”解决这个问题”,我尝试了几件事,但(对我来说)诡异地我意识到大多数(如果不是全部)教程和帖子,用于将消息存储在。TXT或类似文件。我通过将 myscript.py 修改为:

#!/usr/bin/python3

# NOTES:
# 1. This code is the 'final version' after several trials
# 2. Remember that I was aiming to automate anything, just
#    to get familiar with `crontab`; in this case, storing
#    the current time to some .txt file was enough.

import time

t = time.localtime()
current_time = time.strftime("%H:%M:%S", t)

with open('/home/my_user_folder/Desktop/test/readme.txt', 'a') as f:
    f.write(current_time)
    f.write('\n')

...和有效.我觉得有点傻,因为我开始意识到我最初的实现(关于代码、环境设置、权限等)确实从一开始就是正确的,但是使用 Python 命令 print 来“测试”带有 crontab 的循环任务“无效”...

为什么?

【问题讨论】:

    标签: python-3.x linux cron


    【解决方案1】:

    从 crontab 执行的命令的标准输出是不是发送到您的 shell 的标准输出。 (这样做没有多大意义;cron 作业将在您注销后继续运行。)

    通常 crontab 会(尝试)将输出通过电子邮件发送给您。这是可配置的。 man 5 crontab 获取更多信息。

    与其修改 Python 脚本以重定向其自身的输出,不如在 crontab 条目本身中重定向输出:

    * * * * * /usr/bin/python3 /home/my_user_folder/Desktop/test/myscript.py > output.txt
    

    【讨论】:

    • 你好基思。让我看看我是否理解:如果我保留原来的myscript.py(只有“打印”Python 函数),并且按照您建议的方式修改 cron 表文件,我应该在output.txt 中看到的是原始消息““如果你看到这个,你的周期性代码运行正常!”,对吗?
    • 基思,你好。我之前在评论区的问题的答案是“是”。我尝试“打印”一个随机生成的字符,它每过一分钟就会不断变化并存储在“output.txt”中。谢谢,我会接受你的帖子作为答案。
    • 嗨 Keith,当您说 crontab 将尝试通过电子邮件发送输出时,这是否意味着有时它不会?在我的 crontab 命令中,我使用的是 MAILTO="email@email.com",它在大多数情况下都能正常工作,但有时即使脚本正确执行,它也不会发送电子邮件。你知道为什么会发生这种情况吗?
    • 这可能与您的电子邮件配置有关。我不确定 cron 到底做了什么来发送电子邮件,快速浏览一下手册页也没有什么启发。
    猜你喜欢
    • 2015-05-28
    • 1970-01-01
    • 2015-10-11
    • 2014-07-07
    • 2017-11-02
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多