Как получить файл с переменными окружения - PullRequest
0 голосов
/ 27 мая 2019

У меня есть исходный файл с переменными окружения (несколько переменных окружения также являются условными). Исходный файл похож на (имя файла: global_setup)

if( -f /tools/tool/bin) then
    setenv SHELL /bin/csh
endif

setenv LICENCE_FILE 2457@abc
setenv ...........

Я хочу получить этот файл с помощью скрипта Python. Код такой:

import subprocess
import os

if os.path.isfile('global_setup'):
    subprocess.call(['/bin/csh', '-c', 'source ~/global_setup'], shell=True)
else:
    print("file not found");

Но это не работает. Отображение ошибки как:

/ home / global_setup: строка 53: синтаксическая ошибка: неожиданный конец файла

Также я попытался удалить эту ошибку EOF, изменив формат файла на Unix. Даже если это работает, я сомневаюсь, что установка будет выполнена в каком-то другом терминале, так как я использую subprocess.call () в python.

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Выбор файла с помощью subprocess.call() не повлияет на переменные окружения в Python, поскольку subprocess запускает, ну, в общем, подпроцесс.

Вам нужно будет проанализировать файл самостоятельно, если выВы хотите повлиять на os.environ в вашем интерпретаторе Python.

Поскольку ваш файл в стиле csh, в противном случае очень хороший модуль envparse здесь не подойдет.

Тем не менее, вы могли бы вызвать

env = subprocess.check_output(['/bin/csh', '-c', 'source ~/global_setup; printenv'], shell=True)

и построчно проанализировать полученную переменную env и добавить ее содержимое в os.environ.Таким образом, условия в global_setup также будут работать как ожидалось.

0 голосов
/ 27 мая 2019

Вместо того, чтобы делать это таким образом, вы должны делать одно из двух:

  1. Исходные файлы в оболочке linux до вызова вашего скрипта.
  2. Конвертируйте ваш файл в dotenv файл, который Python может прочитать с помощью модуля Python-dotenv.

Поиск до этого проще, IMO, вместо поиска во время выполнения с помощью подпроцесса.

...