Предполагая, что вы переходите на использование Python исключительно для улучшения потока управления и по-прежнему хотели бы продолжать использовать функции оболочки, прямое преобразование потребовало бы написания функции, которая действует как исходная команда импортировать переменные окружения, а затем использовать их в вызове подпроцесса, который выполняется с оболочкой в разрешить подстановку переменных окружения :
import os, shlex, subprocess
def source_file_into_env():
command = shlex.split("env -i bash -c 'source /opt/data/airflow/config/cyrus_de/snowflake_config.txt && env'")
proc = subprocess.Popen(command, stdout = subprocess.PIPE)
for line in proc.stdout:
(key, _, value) = line.partition("=")
os.environ[key] = value
proc.communicate()
def run():
source_file_into_env()
subprocess.run("""sudo /home/user/snowsql \
-c $connection \
--config=/home/user/.snowsql/config \
-w $warehouse \
--variable database_name=$dbname \
--variable stage=$stagename \
--variable env=$env \
-o exit_on_error=true \
-o variable_substitution=True \
-q /data/snowsql/queries.sql""", \
shell=True, \
env=os.environ)
if __name__ == '__main__':
run()
Если вместо этого вы ищете go pure Python без каких-либо вызовов оболочки, вместо snowsql
можно использовать более собственный разъем, предлагаемый Snowflake . Это было бы гораздо более инвазивным изменением, но примеры подключения помогут вам начать работу.