Я хочу установить переменные среды в оболочке, а затем использовать эти переменные в последующих командах; однако использование subprocess.call() в режиме оболочки не позволяет установить переменную среды. Как получить желаемую функциональность через подпроцесс.Переменные окружения, не сохраненные в результате последующих вызовов подпроцесса (Python)
Вот упрощенный пример проблемы у меня возникли:
import subprocess
#Method 1
subprocess.call('VARNAME1=\"MyValue1\"', shell=True)
subprocess.call("echo $VARNAME1", shell=True)
#Method 2
subprocess.call('VARNAME2=\"MyValue2\"; echo $VARNAME2', shell=True)
Выход:
>
> MyValue2
Ожидаемый результат:
> MyValue1
> MyValue2
не сможет струне команды вместе с ";" как и во втором методе.
Спасибо за помощь.
Каждый прогон 'subprocess.call' запускает новую оболочку. Они не могут делиться этим путем. Если вам нужно установить переменные среды для порожденной оболочки, используйте 'env' kwarg функцию' call'. –
Будет ли использование PIPE наилучшим способом передать последующие команды в один и тот же процесс оболочки? – digitaLink
Хм? Нет. «PIPE» не позволяет вам произвольно использовать произвольные команды. О, я полагаю, вы могли бы ввести «PIPE» в «интерактивный» сеанс оболочки и отправить его на стандартный ввод ... да. Это кажется мне очень уродливым. Влияют ли ваши команды оболочки на переменные, которые вам нужны для последующих вызовов оболочки, или они просто используют общие внешние переменные среды? –