Подтвердить что ты не робот

Установить переменную среды в 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 определил путь и установил переменную окружения в правильное значение)

4b9b3361

Ответ 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())