#python #ubuntu
#python #ubuntu
Вопрос:
У меня есть папка программы, для которой требуются пути:
export RBT_ROOT=/path/to/installation/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$RBT_ROOT/lib
export PATH=$PATH:$RBT_ROOT/bin
Затем выполняется команда:
rbcavity -was -d -r <PRMFILE>
rbcavity — это exe-программа, содержащаяся в папке программы bin
PRMFILE — содержится ли программа в текущем пути (рабочая папка не включена в папку program)
Это работает из командной строки, но не из Python. Как я могу запустить это из скрипта Python (3.5)? Я попробовал subprocess.run, но он не находит команду rbcavity… Я новичок в Linux и не совсем понимаю, как это работает.
Комментарии:
1. Где выполняются эти
export
инструкции?2. subprocess.run([«export», «PATH=$PATH:$RBT_ROOT/bin»], shell=True)
3. Не могли бы вы добавить это к своему вопросу?
Ответ №1:
Строка
subprocess.run(["export", "PATH=$PATH:$RBT_ROOT/bin"], shell=True)
устанавливает только PATH
переменную среды в подпроцессе (и любой из его дочерних процессов, если таковые имеются). Следовательно, он не изменился в вашей программе на Python, поэтому ваш исполняемый файл не удалось найти.
Чтобы установить переменную среды в Python, используйте os.setenv
. Т.е.,
rbt_root='/path/to/installation/'
path = os.getenv('PATH')
path = ':' rbt_root 'bin'
os.setenv('PATH',path)
Редактировать:
Итак, оказывается, что os.setenv
это не очень переносимо. Вместо этого используйте os.environ
, который похож на словарь. Например.,
os.environ['PATH'] = path
Комментарии:
1. Это выдает ошибку: модуль os не имеет атрибута setenv
2. Какая это версия Python?
3. 3.5 и тем временем я прочитал, что невозможно изменить среду оболочки из скрипта python…
4. Невозможно изменить среду оболочки с Python. Однако Python изменяет среду самого себя и всех своих процессов-потомков.
5. Боже, я допустил ошибку в имени одной переменной среды. Теперь это работает. Спасибо за вашу помощь.
Ответ №2:
Обычно я использую библиотеку ОС. Я использую следующие команды для запуска сервера Cassandra. В конце, чтобы запустить это, я делаю python filename.py
import os
os.chdir('./dsc-cassandra-3.0.9/bin')
os.system('./cassandra start')