2

I'm totally lost here. I'm trying to create a scheduler to run python script on my Mac, but I'm getting the following error:

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'

So crontab convinces me that there is no such file or a directory, which is not true. I can run my script manually without errors. My crontab is:

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

What am I doing wrong? I'd be grateful for any help!

And is this possible without changing the relative path to an absolute path? I am aware of this solution

2 Answers 2

3

I assume crontab's cwd (Current Working Directory) is not same as where the script is stored.

this would solve your problem:

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

You can get the directory where you script is by calling "os.path.dirname(os.path.realpath(file))"

if you change the current working directory "os.chdir(...dir...)" you can access you config/config.json by relative path,

Otherwise you will have to use a absolute path

Try running this and check your output file:

import os
script_dir = os.path.dirname(os.path.realpath(__file__))
print (os.getcwd())
print(script_dir)
os.chdir(script_dir)
print (os.getcwd())
Sign up to request clarification or add additional context in comments.

Comments

0

Try to open with full path to the json file.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.