Как импортировать .sh файл из другого каталога в python - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть сценарий .sh в каталоге /me/app/environment/env_param.sh

, который содержит несколько переменных (пытается экспортировать) как

export username = "uname"
export pw = "password"

. ,.

И скрипт Python в каталоге /me/dbconnect.py

Итак, как мне импортировать env_param.sh в мой скрипт dbconnect.py и использовать переменные 'username' и 'pw'dbconnect.py)?

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Обычно вы не запускаете import сценарий оболочки в программу Python, это отдельные механизмы сценариев с различными грамматическими правилами, соглашениями и средами времени выполнения.

Обычная настройка включает создание сценария запускамаленькая оболочка вокруг тебя 'py`

~ / me / dbconnect.sh

source ~/app/environment/env_param.sh
~/me/dbconnect.py ...

Inside ~ / me / dbconnect.py

   import os ;
   ...
   print(os.environ['username')) ;

Alternative1:

Можно также рассмотреть альтернативу преобразования env_param.sh в файл свойств, где каждая строка следует за ключевым словом = значение формата. В этой настройке сценарии sh могут «исходить» из файла параметров (при условии отсутствия подстановочных знаков и т. Д.), А программа python может анализировать файл в словаре.

env.param:

user=my-user-id
password=my-pass

Использование этого решения будет поддерживать только простые константы.

См .: Python: как создать словарь из файла свойств, не используя комментарии о том, как прочитать файл свойств в словарь.

Альтернатива 2: Если оба варианта нецелесообразны, рассмотрите возможность открытия env_param.sh в python и поиска строк, соответствующих «export var = value», и загрузки их в словарь. Недостатком является то, что любое расширение файла параметров, которое будет использовать функции bash / shell, не будет работать.

0 голосов
/ 08 ноября 2019

Помимо того факта, что опубликованный вами env_params.sh синтаксически недействителен, я предполагаю, что у вас есть веские причины, по которым вы хотите предоставить параметры в файле оболочки, но хотите прочитать их из Python. Для этого я предлагаю вам создать вспомогательный файл оболочки, который будет источником вашего файла параметров и выводит все параметры:

 #!/bin/sh
 # Auxiliary file
 . /path/to/env_params.sh
 echo username=$username
 echo pw=$pw
 ....

Вы запускаете этот скрипт из вашей программы Python и анализируете его вывод, который- если некоторые переменные не расширяются до строки, содержащей символы новой строки, - это простой набор строк NAME = VALUE, аналогичный файлу INI.

Это означает, что вы можете использовать все функции оболочки в файле параметров, напримерв качестве расширения параметров и т. д., при необходимости вы также можете использовать файл параметров в других сценариях оболочки.

...