使用 crontab 运行 Python 脚本时出现 FileNotFoundError

时间:2021-01-21 16:31:08

标签: python-3.x cron errno

我完全迷失在这里。我正在尝试创建一个调度程序来在我的 Mac 上运行 python 脚本,但出现以下错误:

Traceback (most recent call last):
  File "/Users/Root/Desktop/Project/Data/script.py", line 148, in <module>
    run(
  File "/Users/Root/Desktop/Project/Data/script.py", line 121, in run
    config = get_config("config")
  File "/Users/Root/Desktop/Project/Data/config/__init__.py", line 3, in get_config
    with open(f"config/{config_type}.json", "r") as file:
FileNotFoundError: [Errno 2] No such file or directory: 'config/config.json'

所以 crontab 说服我没有这样的文件或目录,这是不正确的。我可以手动运行我的脚本而不会出错。 我的 crontab 是:

00 19 21 1-12 * /Library/Frameworks/Python.framework/Versions/3.9/bin/python3/ /Users/Root/Desktop/Project/Data/script.py >> /Users/Root/Desktop/Project/Data/cron.txt 2>&1

我做错了什么? 如有任何帮助,我将不胜感激!

如果不将相对路径更改为绝对路径,这可能吗?我知道这个解决方案

2 个答案:

答案 0 :(得分:1)

我假设 crontab 的 cwd(当前工作目录)与存储脚本的位置不同。

这将解决您的问题:

import os
script_dir = os.path.dirname(os.path.realpath(__file__))
os.chdir(script_dir)

您可以通过调用“os.path.dirname(os.path.realpath(file))”来获取脚本所在的目录

如果您更改当前工作目录“os.chdir(...dir...)”,您可以通过相对路径访问您的 config/config.json,

否则你将不得不使用绝对路径

尝试运行它并检查您的输出文件:

import os
script_dir = os.path.dirname(os.path.realpath(__file__))
print (os.getcwd())
print(script_dir)
os.chdir(script_dir)
print (os.getcwd())

答案 1 :(得分:0)

尝试使用 json 文件的完整路径打开。