ImportError: Нет модуля с другим подпроцессором Popen в той же папке из терминала / cron - PullRequest
0 голосов
/ 07 октября 2019

Когда я выполняю 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, но команда терминала имеет приоритет.

Большое спасибо, что нашли время помочь мне !!

...