Установить переменную среды в python script
У меня есть bash script, который устанавливает переменную окружения, запускает команду
LD_LIBRARY_PATH=my_path
sqsub -np $1 /homedir/anotherdir/executable
Теперь я хочу использовать python вместо bash, потому что хочу вычислить некоторые из аргументов, которые я передаю команде.
Я пробовал
putenv("LD_LIBRARY_PATH", "my_path")
и
call("export LD_LIBRARY_PATH=my_path")
за которым следует
call("sqsub -np " + var1 + "/homedir/anotherdir/executable")
но всегда программа отказывается, потому что LD_LIBRARY_PATH не установлен.
Как я могу это исправить?
Спасибо за помощь!
(если я экспортирую LD_LIBRARY_PATH перед вызовом python script, все работает, но я бы хотел, чтобы python определил путь и установил переменную окружения в правильное значение)
Ответы
Ответ 1
bash:
LD_LIBRARY_PATH=my_path
sqsub -np $1 /path/to/executable
Аналогично, в Python:
import os
import subprocess
import sys
os.environ['LD_LIBRARY_PATH'] = "my_path" # visible in this process + all children
subprocess.check_call(['sqsub', '-np', sys.argv[1], '/path/to/executable'],
env=dict(os.environ, SQSUB_VAR="visible in this subprocess"))
Ответ 2
Вы можете добавлять элементы в свою среду, используя
os.environ['LD_LIBRARY_PATH'] = 'my_path'
и запустите подпроцессы в оболочке (которая использует ваш os.environ
), используя
subprocess.call('sqsub -np ' + var1 + '/homedir/anotherdir/executable', shell=True)
Ответ 3
Компактное решение (если вам не нужны другие переменные среды):
call('sqsub -np {} /homedir/anotherdir/executable'.format(var1).split(),
env=dict(LD_LIBRARY_PATH=my_path))
Использование инструмента командной строки env:
call('env LD_LIBRARY_PATH=my_path sqsub -np {} /homedir/anotherdir/executable'.format(var1).split())