#python-3.x #linux #bash
#python-3.x #linux #bash
Вопрос:
- У меня есть globals.py файл, в котором я хотел бы сохранить соответствующую информацию для всей системы, такую как расположение каталогов, пути к службам / скриптам python3 и т.д.
- Я запускаю эти службы при загрузке с помощью скрипта оболочки 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
что пользователь может когда-нибудь измениться… Ответил на мой собственный вопрос, спасибо, что посмотрели!