Попытка получить имя файла или каталог из глобального класса Python3, а затем выполнить это с помощью bash-скрипта

#python-3.x #linux #bash

#python-3.x #linux #bash

Вопрос:

  1. У меня есть globals.py файл, в котором я хотел бы сохранить соответствующую информацию для всей системы, такую как расположение каталогов, пути к службам / скриптам python3 и т.д.
  2. Я запускаю эти службы при загрузке с помощью скрипта оболочки bash, однако мне нужно получить местоположения служб из моих глобальных перечислений классов.

Я продолжаю получать ОШИБКУ оболочки: python3: не удается открыть файл ‘path/to/service.py ‘: [Ошибка 2] Нет такого файла или каталога

 **globals.py** 

#contains a dictionary:
SERVICE_MAP = {
    'test': '~/path/to/service.py',
    'test2': '$HOME/path/to/service.py',
    'test3': '/full/path/to/service.py',
}
 

Я перепробовал все вышеуказанные формы путей к службам. и метод извлечения:

 **launch.sh**

function get_service() {
   python3 -c "import common.globals as gbl; print(gbl.SERVICE_MAP['$1'])"
}
 

А затем вызвать:

 **launch.sh**

service=$(get_service "test")  # get service "test"
echo $service  #Output: is what it should be... "path/to/service.py"

# but when I now do:

python3 $service
#or
python3 "$service"

Output is always:
python3: can't open file '/path/to/service.py': [Errno 2] No such file or directory
 

Что я здесь делаю не так?

Комментарии:

1. ~/path/to/service.py != path/to/service.py != /path/to/service.py … что из этого? Я лично ожидал бы наибольшей вероятности успеха от формата test3 …

Ответ №1:

Вместо того, чтобы использовать полный путь в globals.py , я указываю относительный путь:

 SERVICE_MAP = {
    'test': '/rel/path/to/service.py',
}
 

И в моем launch.sh скрипте я добавляю $HOME :

 function get_service() {
   python3 -c "import common.globals as gbl; print(gbl.SERVICE_MAP['$1'])"
}
python3 "$HOME$(get_service "test")"
 

Мне это нравится больше всего, потому $HOME что пользователь может когда-нибудь измениться… Ответил на мой собственный вопрос, спасибо, что посмотрели!