Próbuję zaplanować prosty skrypt Pythona na MacOS za pomocą Crontab. Widziałem wiele przewodników i odpowiedzi na inne pytania tutaj, ale nadal moje zadanie nie może pracować. Właściwie nie jestem tak zaznajomiony z terminalem i tego rodzaju rzeczy, ale nie wydawał się tak trudnych, więc mam nadzieję rozwiązać to.

Śledziłem dwa różne podejścia.

Pierwsze podejście:

  1. Używam polecenia crontab -e na terminalu
  2. W VIM naciskam I do wstawienia i wklejam:
* * * * * /usr/bin/python mypath/ap.py
  1. Naciśnij "ESC" i ": QW", aby zamknąć okno VIM.

  2. Kiedy piszę na terminalu {x0}}, aby spojrzeć na mój aktywny Crontab pojawia się moje polecenie, ale nic się nie dzieje z skryptu (należy utworzyć plik TXT).

Drugie podejście:

  1. Przeszukę tę linię w terminalu:
* * * * * /usr/bin/python mypath/ap.py >> mypath/MyCronLog.txt 2>&1
  1. W ten sposób widzę plik TXT, w którym mogę przeczytać błędy dziennika i ewentualne. W moim dzienniku pojawia się: "-Bash: Aplikacje: Nie znaleziono polecenia" lub "-Bash: ap.py: nie znaleziono polecenia".

Mój skrypt Pythona znajduje się w folderze na moim pulpicie (nie wiem, czy ma znaczenie).

Ponadto uruchomię mój skrypt Pythona z terminalu i działa doskonale. Każda sugestia jest doceniana!

Edytuj 1: Ścieżka mojego skryptu Pythona jest następująca: /Users/myname/desktop/ap/ap.py.

Edytuj 2: /opt/anaconda3/bin/python zamiast /usr/bin/python ale nic się nie zmieniło.

Edytuj 3: Zmieniłem skrypt Pythona do pobrania pliku Excel za pomocą Pandy (które byłyby w pobliżu mojego ostatecznego celu). Publikuję tutaj najbardziej naiwną wersję (która działa z terminalu przez python ap.py):

#!/opt/anaconda3/bin/python
import pandas as pd 
def write_df():
    a = pd.DataFrame([1,1])
    a.to_excel('excel.xlsx')
write_df() 

Mam nadzieję, że to pomoże.

0
Frisk19 25 marzec 2021, 21:37

1 odpowiedź

Najlepsza odpowiedź

Problem wydaje się być w skrypcie Pythona. Myślę, że plik TXT jest tworzony, ale w niewłaściwym folderze. Kiedy Cron nazywa skrypt Pythona, katalog roboczy nie jest katalogiem tego skryptu (patrz Oto). Wyglądaj Oto dla obejścia.

EDYTUJ:

Zachowanie skryptu może w zależności od katalogu, z którego go nazywasz (nie jest idealnym sposobem na pisanie skryptów). Kiedy jesteś w /Users/myname/Desktop/ap i zadzwoń python ap.py, może to prowadzić do czegoś innego niż dzwonienie {x2}} z /Users/myname/Desktop

Możesz zweryfikować to, dzwoniąc do tego krótkiego skryptu:

import os

print(os.getcwd())

Mogę sobie wyobrazić, że twój skrypt zawiesza się podczas wywołania przez Cron, gdy działa, jeśli zadzwonisz do tego z katalogu zawierającego.

0
kevinnls 26 marzec 2021, 17:01