Когда я выполняю exec.py
(структура ниже), непосредственно с терминала или cronjob, выполнение работает нормально. Однако, когда я хочу проверить, запущен ли скрипт exec.py
, проверить это состояние, а также завершить и / или запустить exec.py
из файла cron.py
. ( Примечание: он правильно работает в PyCharm ) Я получаю:
ImportError no module found named layer_a_first.layer_a_second.functions
Ниже работает команда непосредственно из терминала или cronjob работает правильно:
/home/user/project/venv/bin/python3.6 /home/user/project/layer_a_first/layer_a_second/exec.py
Моя структура проекта:
project/
|-- layer_a_first/
| |-- layer_a_second/
| | |-- exec.py
| | |-- cron.py
| | |-- functions.py
|-- layer_b_first/
| |-- functions.py
Где у меня есть некоторые функции, вызываемые в exec.py
:
import sys
sys.path.append('/home/user/project')
from layer_a_first.layer_a_second.functions import func_a
from layer_b_first.functions import func_b
# Call func_a
func_a()
# Call func_b
func_b()
И скрипт проверки / завершения / запуска в cron.py
:
import sys
sys.path.append('/home/user/project')
import psutil
from subprocess import Popen
# Check/terminate/launch function
def launch():
proccron = 'exec.py'
for process in psutil.process_iter():
if process.cmdline() == ['python', proccron]:
print('Process ' + proccron + ' found. Terminating it.')
process.terminate()
Popen(['python', proccron])
print('Process ' + proccron + ' restarting.')
break
else:
print('Process ' + proccron + ' not found: starting it.')
Popen(['python', proccron])
launch()
Когда я запускаю cron.py
в PyCharm, он работает правильно. Но когда я использую команду терминала или cronjob, я получаю вышеупомянутое ImportError
:
/home/user/project/venv/bin/python3.6 /home/user/project/layer_a_first/layer_a_second/cron.py
Я много пытался изменить каталог sys.path
или использовать os.chdir
перейти к правильному каталогу. Это все не работает. Кто-нибудь знает, как я могу это исправить? Желательно, чтобы он все еще работал в терминале и PyCharm, но команда терминала имеет приоритет.
Большое спасибо, что нашли время помочь мне !!