subprocess.check_output не учитывает переменные среды - PullRequest
0 голосов
/ 19 февраля 2019

При использовании модуля Pythons subprocess я заметил, что переменные окружения устанавливаются неправильно.Ниже приведен пример сеанса IPython, показывающий это:

In [21]: subprocess.check_output(["echo", "$DUMMY"], env={"DUMMY" : "321"}, shell=True)
Out[21]: b'\n'

In [22]: subprocess.check_output(["echo", "$DUMMY"], env={"DUMMY" : "321"})
Out[22]: b'$DUMMY\n'

Я получаю, что второй не работает, так как он не запускается оболочкой.Но первый - это результат, который вы получаете при отображении переменной, которая не установлена.Так почему же это не работает?Или, более вероятно, что я делаю не так?

1 Ответ

0 голосов
/ 19 февраля 2019

Переменная интерполяция - это особенность оболочки;без оболочки строка, которую вы пытаетесь ввести echo, буквально $DUMMY.

. Вы можете добавить shell=True, а затем, конечно, изменить первый аргумент на строку вместо списка;

subprocess.check_call('echo "$DUMMY"', env={"DUMMY": "321"}, shell=True)

... или найдите способ передать второй аргумент в списке непосредственно из Python.

Лучший тестовый пример, чем echo, равен env;тогда вы можете видеть, что он на самом деле устанавливает переменную так, как вы ее просили.

...