Как запускать команды Linux (Ubuntu) в скрипте Python?

#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')