2012-04-06 5 views
0

У меня есть файл (myenv.sh) со следующим содержаниемPython и окружающая среда

export MYVAR="HELLO" 

И тогда у меня есть программа (myhugeprogram.py):

#!/usr/bin/env python 
import os 
print os.environ['MYVAR'] 

Что является исполняемым: chmod 755 myhugeprogram.py

Теперь я исхожу из окружающей среды: source myenv.sh

и запустить мою программу:

./myhugeprogram.py 
HELLO 

Как и следовало ожидать. Теперь я запускаю его неинтерактивно через SSH:

[email protected]:~$ ssh [email protected] ./myhugeprogram.py 
Traceback (most recent call last): 
    File "./myhugeprogram.py", line 3, in <module> 
    print os.environ['MYVAR'] 
    File "/usr/lib/python2.5/UserDict.py", line 22, in __getitem__ 
    raise KeyError(key) 
KeyError: 'MYVAR' 

что является нормальным, потому что я не получены myenv.sh. Теперь встает вопрос:

Как я могу создать файл Bash, который устанавливает некоторые переменные среды перед выполнением моего скрипта Python при запуске не-интерактивного с помощью SSH?

ответ

3

Два способа я могу думать:

  • включают команду источника в команде SSH запускается, например

    ssh [email protected] "source myenv.sh; ./myhugeprogram.py" 
    
  • установить переменную среды в файле .bashrc.

0

Запишите оболочку сценария оболочки (видимую из обеих сред), которая устанавливает среду и вызывает программу вместе со всеми аргументами вместе. Вы можете сделать этот shell-скрипт интеллектуальным, чтобы он только устанавливал среду на основе текущей среды, поэтому вам всегда нужно вызывать этот сценарий оболочки независимо от вашего контекста и рассматривать его как черный ящик.

0

вы должны экспортировать/источник переменного в самом скрипте,

, так как если вы открыть сеанс SSH и команды источника огня, а затем использовать другой сеанс для выполнения сценария,

переменной среды будет недоступна, так как вся новая среда будет загружена снова.

вы можете установить переменную окружения для своего скрипта, используя синтаксис os.environ["ASD"] = "asd".

Смежные вопросы