У меня есть папка с программой, для которой требуются пути:

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 - программа, содержащаяся в текущем пути (рабочая папка не входит в папку с программой)

Это работает из командной строки, но не из Python. Как я могу запустить это из скрипта Python (3.5)? Я попробовал subprocess.run, но он не нашел команду rbcavity ... Я новичок в Linux и не совсем понимаю, как это работает.

1
Gosia 29 Авг 2020 в 18:35

2 ответа

Лучший ответ

Линия

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
Daniel Walker 1 Сен 2020 в 01:57

Обычно я использую библиотеку ОС. Я использую следующие команды для запуска и запуска сервера Cassandra. В конце концов, чтобы запустить это, я делаю python filename.py

import os
os.chdir('./dsc-cassandra-3.0.9/bin')
os.system('./cassandra start')

1
amris 29 Авг 2020 в 15:38