исходные учетные данные изнутри python - PullRequest
0 голосов
/ 01 марта 2020

Я подумал об использовании следующего для запуска обычно запускаемой как оболочки внутри python:

x = subprocess.call('source credentials.txt', shell=True)
print os.environ

Однако, похоже, что среда не обновляется в остальной части скрипта , Почему бы нет? И есть ли способ преодолеть это с помощью оболочки (а не python) для обновления моих ОС OS?

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Посмотрите на эту библиотеку: https://pypi.org/project/python-dotenv/

Я использовал ее раньше, и она проста и делает свою работу. Вместо 'credentials.txt' вы ставите ключ -значение пар в файле .env и загрузка его во время запуска программы с помощью одного вызова load.

Вот несколько кодов:

import os
from pathlib import Path
from dotenv import load_dotenv, find_dotenv

# write some sample contents in the current dir
Path.cwd().joinpath(".env").write_text("USERNAME=My user name\nPASSWORD=MyCust0mS3cr3tPAsw00d")

# loads from .env file in CWD
load_dotenv(find_dotenv())  

# here is the magic:
print(os.environ["PASSWORD"])
0 голосов
/ 01 марта 2020

Вы можете запустить подпроцесс для получения результатов и распечатать os.environ обратно к текущему процессу python. Например:

os.environ=ast.literal_eval(subprocess.check_output(
  'source credentials.txt && python -c "import os;print os.environ"', shell=True)
)

Ответ, вдохновленный этим ответом .

...