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

FileNotFoundError while using crontab to run Python script

我完全迷失在这里。我试图在我的 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

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

这是否可以在不将相对路径更改为绝对路径的情况下实现?我知道这个解决方案

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

我假设 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())