Давайте определим два типа переменных окружения для этого объяснения. Я полностью осознаю, что этого различия на самом деле не существует в реальной жизни.
Назовем «Предопределенные переменные» те переменные, которые уже есть в среде на момент запуска скрипта.
«Переменные времени запуска» — это те, которые определены встроенными при вызове скрипта и применяются только к среде процесса, созданного при запуске скрипта.
Вот некоторые примеры:
export var1 = "value1"
export var2 = "value2"
# ... more commands
# Now var1 and var3 are in the python process' environment
python script.py args
var1 = "value1" var2 = "value2" python script.py args
Я могу использовать os.environ для доступа к переменным из моего скрипта Python.
Однако я хотел бы различать «предопределенные» переменные и переменные «времени запуска» внутри моего кода Python.
Мой вариант использования следующий. Предположим, я запускаю такой скрипт:
var1 = "value1" var2 = "value2" python script.py args
Я хотел бы иметь возможность регистрировать всю команду, введенную в командной строке, то есть:
var1 и var2)Первые два пункта можно сделать с помощью sys.argv, но на данный момент я не могу отличить ранее определенные переменные от var1 и var2.
Добавлен некоторый контекст, чтобы прояснить мои намерения.






Почему бы не использовать os.environ для установки переменных окружения внутри скрипта?
вы можете получить исходные переменные среды
for k,v in os.environ.items():
print(f"{k} = {v}")
а затем вы можете установить свой:
os.envrion["var1"]=value1
os.envrion["var2"]=value2
Поскольку переменная среды представляет собой параметр конфигурации для моего скрипта, и я хочу иметь возможность изменять их во время вызова скрипта.
@IvanProsperi94: Затем вы можете добавить параметры командной строки в свой скрипт, чтобы переопределить настройки среды.
К сожалению, это не вариант, собственно поэтому и возникает проблема, так как я не использую параметры командной строки. Конфигурация обрабатывается Pydantic и анализируется из файла JSON, а переменные среды — это способ переопределения конфигураций из JSON. Еще раз спасибо за ваши комментарии.
Не совсем понятно, что вы пытаетесь отличить. Я думаю, это ваши случаи:
export var1 = "value1"
python script.py args
### vs
var1 = "value1" python script.py args
Если я прав, то это невозможно сделать из Python (да и вообще из любого языка). Это функция оболочки для установки/переопределения переменной среды при выполнении команды, поэтому процесс получает полную среду в виде словаря (или хэш-карты, если хотите), и нет никакой разницы между переменными среды в зависимости от того, как они были установлены. .
Я не уверен, но мое чутье подсказывает, что это невозможно. Среда — это всего лишь один блок пар ключ-значение; ваша программа просто получает все это и не знает, откуда оно взялось или как оно было построено.