Как получить доступ к переменным Batch Script в python? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть bat-файл, который устанавливает значения переменных, и мне нужно использовать эти переменные в скрипте Python.

env.bat:

SET USERNAME=username
SET PASSWORD=password

Мне нужно, чтобы указанные выше переменные былииспользуется в скрипте Python.Я пробовал ниже, но я получаю Нет в качестве вывода.

login.py

import os
import subprocess
subprocess.call(['env.bat'])
print(os.getenv('USERNAME'))

Не могли бы вы помочь, где я не прав или любым другим способомЯ мог бы добиться этого?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 марта 2019
import os
import subprocess
p = subprocess.Popen(['cmd', '/v:on', '/q', '/c', 'env.bat', '&echo(!USERNAME!&echo(!PASSWORD!'], stdout=subprocess.PIPE, universal_newlines=True)
stdout, stderr = p.communicate()
username, password = stdout.splitlines()
print(username)
print(password)

Поскольку env.bat не использует setlocal, переменные среды будет доступен в том же процессе cmd после запуска env.bat. Это позволяет echo значениям !USERNAME! и !PASSWORD! стандартный поток.

Опции cmd:

  • /v:on включает отложенное расширение.
  • /q отключает эхо.
  • /c запускает следующую командную строку.

Примечание:

  • Протестировано в Python 2 и Python 3 . Python 2 отсутствует поддержка для менеджер контекста с subprocess, поэтому оператор with не использовался.

  • Переменная окружения USERNAME является встроенным именем. Изменение его без уважительной причины может привести к непредвиденным проблемам.

  • Поскольку включено отложенное расширение, может потребоваться использование ! в env.bat для экранирования, иначе ! может быть опущено, когда cmd анализирует файл. call echo в командной строке может избежать включения отложенного расширение при необходимости.

0 голосов
/ 26 марта 2019

Используя os.getenv(), вы пытаетесь получить переменную окружения.Итак, вам нужно установить переменную окружения в вашем пакетном файле.Это можно сделать с помощью команды SETX, как описано в this URL .

SETX USERNAME=username
SETX PASSWORD=password
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...