python - 使用 cron 作业执行 python3 文件。

标签 python python-3.x cron ubuntu

我有一个位于/home/valence/的 python3 脚本,它从 Yahoo! 获取当天的天气预报(以摄氏度为单位的最高和最低温度值)。天气API。该文件看起来完全像这样:

#!/usr/bin/python3
from urllib import request
import json
url="https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D349859%20and%20u='c'&format=json&diagnostics=true&callback="
response=request.urlopen(url)
str_response = response.readall().decode('utf-8')
dic = json.loads(str_response)
dic["query"]["results"]["channel"]["location"]["region"]="R.M."
low=dic["query"]["results"]["channel"]["item"]["forecast"][0]["low"]
high=dic["query"]["results"]["channel"]["item"]["forecast"][0]["high"]
forecast=open("forecast.txt", "w+")
forecast.write("Minima: "+str(low)+" Maxima: "+str(high))
forecast.close()

当我执行它时它工作正常。它使用正确的值创建或覆盖文件 forecast.txt,但是当我尝试使用 cron 执行以下 cron 作业时:

* * * * * /home/valence/Get_forecast.py

没有创建或修改文件 forecast.txt。

所以我需要知道我做错了什么以及如何使它按预期工作。 cron 作业并不意味着每分钟都执行一次(因为一天的预测在一天中保持不变),但现在我已经这样做了,所以我可以看到变化而不必等待太多。

注意:我是 linux 新手(我使用的是 Lubuntu)

最佳答案

没有得到文件forecast.txt的原因在目录 /home/valence使用 crontab 作业时 * * * * * /home/valence/Get_forecast.py是cron不执行目录/home/valence中的命令并且您指定了文件 forecast.txt在你的程序中以相对路径形式。所以文件是在别处创建的。

要获得预期的文件输出,您可以使用以下 crontab 作业:

* * * * * cd /home/valence && ./Get_forecast.py

这显式地将当前工作目录指定为 /home/valence ,并从那里执行脚本。

此外,要从 stdout 和 stderr 获取输出,在发生意外情况时添加重定向总是有帮助的:

* * * * * cd /home/valence && ./Get_forecast.py > /tmp/forecast.log 2>&1

注意:

前两个 crontab 作业假定 Get_forecast.py jexecutable 并指定了 shebang。 ./Get_forecast.py部分始终可以替换为 python3 Get_forecast.py/usr/bin/python3 Get_forecast.py更清楚。

关于python - 使用 cron 作业执行 python3 文件。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29527469/

相关文章:

linux - Ubuntu 定时任务

python - 如何在 Django 中测试 celery period_task?

json - 如何将 PIL 图像转换为 JSON 可序列化字符串,反之亦然?

python - 如何去掉抓取数据的p标签

python - 带有 apache 和 django 的 XsendFile

python - 基本的 Python 代码不起作用

python - 如何将计数器结果转换为元组列表

python - 屏幕未为 python 项目运行 @reboot

python - 如何通过检查传递给 pytest_runtest_teardown 的 Item 对象来确定测试是通过还是失败?

python - 在python中的另一个较长列表中搜索列表项