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

问题描述

我完全迷失在这里。我正在尝试创建一个调度程序来在我的 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

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

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

解决方法

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...