скрипт python в cron не читает CSV, если он сам не создает CSV

У меня есть следующий сценарий. Он работает, когда я запускаю его в командной строке, и он работает, когда я запускаю его в cron.

Переменная apath - это абсолютный путь к файлу.

cat=['a','a','a','a','a','b','b','b','b','b']
val=[1,2,3,4,5,6,7,8,9,10]
columns=['cat','val']
data=[cat,val]
dict={key:value for key,value in zip(columns,data)}

statedata_raw=pd.DataFrame(data=dict)
statedata_raw.to_csv(apath+'state_data.csv',index=False)

statedata_raw2=pd.read_csv(apath+'state_data.csv')
statedata_raw2.to_csv(apath+'state_data2.csv',index=False)

Но когда я пытаюсь запустить первую часть вручную, создавая первый csv, а затем запускаю вторую часть через cron, второй оператор read_csv не работает. Я проверил разрешения для файла state_data.csv, и они в порядке. Он установлен на-rwxr-xr-x

Чтобы быть конкретным: сначала я запускаю этот сценарий вручную через командную строку. Он выполняет и создает state_data.csv. Затем я проверяю разрешения state_csv, и они-rwxr-xr-x

cat=['a','a','a','a','a','b','b','b','b','b']
val=[1,2,3,4,5,6,7,8,9,10]
columns=['cat','val']
data=[cat,val]
dict={key:value for key,value in zip(columns,data)}

statedata_raw=pd.DataFrame(data=dict)
statedata_raw.to_csv(apath+'state_data.csv',index=False)

а затем этот скрипт через cron, который не работает и дает сообщение об ошибке ниже

statedata_raw2=pd.read_csv(apath+'state_data.csv')
statedata_raw2.to_csv(apath+'state_data2.csv',index=False)

Это ошибка, которую я получаю от системы

Traceback (most recent call last):
  File "/users/michaelmader/wdtest.py", line 39, in <module>
    statedata_raw2=pd.read_csv(apath+'state_data.csv')
  File "/opt/miniconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 676, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/opt/miniconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 448, in _read
    parser = TextFileReader(fp_or_buf, **kwds)
  File "/opt/miniconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 880, in __init__
    self._make_engine(self.engine)
  File "/opt/miniconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 1114, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "/opt/miniconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 1891, in __init__
    self._reader = parsers.TextReader(src, **kwds)
  File "pandas/_libs/parsers.pyx", line 374, in pandas._libs.parsers.TextReader.__cinit__
  File "pandas/_libs/parsers.pyx", line 678, in pandas._libs.parsers.TextReader._setup_parser_source
OSError: Initializing from file failed

Обобщить

  1. Запустить полный сценарий через Терминал: создается state_data2.csv: пройти
  2. Запустить полный скрипт через cron: state_data2.csv is created: pass
  3. Запустите первую часть через Терминал, вторую - через cron: fail

Я использую MacOS, и я уже дал crontab полный доступ к диску в системных настройках.

1 ответ

Решение

Я разобрался в проблеме. Проблема заключалась в разрешениях, предоставленных cron в MacOS. Я думал, что решил это, дав\usr\bin\crontab полный доступ к диску, но мне действительно нужно было предоставить полный доступ к диску usr\sbin\cron

Шаги для этого можно найти здесь: https://blog.bejarano.io/fixing-cron-jobs-in-mojave/.

Как только я внес это изменение, все заработало.

Другие вопросы по тегам