python-3.x - 使用 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())
推荐阅读
- python - 如何从数据集中获取两种不同类型的数据?
- chart.js - chartjs:气泡图和折线图
- r - 如何让我的柱形图在我闪亮的应用程序中不拥挤的情况下呈现?
- vba - 在 Outlook 电子邮件中包含视口元标记
- junit - Spring-boot Redis JMS JUnit
- android - 在android中重命名文件名
- javascript - TypeError:svg__WEBPACK_IMPORTED_MODULE_0__.default.node 不是函数
- angular - PrimeNG 中 p-Template 的用途是什么?
- reactjs - 如何从查询字符串中获取firestore id?
- python-sphinx - 如何在 sphinx-needs 而不是 needs.json 中生成 html 输出