Как запустить контекстно-зависимые команды в Python? - PullRequest
3 голосов
/ 27 июня 2010

Я хочу написать скрипт установки пакета Python на Python в virtualenv.Я пишу функцию для установки virtualenv

def prepareRadioenv():
    if not os.path.exists('radioenv'):
        print 'Create radioenv'
        system('easy_install virtualenv')
        system('virtualenv --no-site-package radioenv')
    print 'Activate radioenv'
    system('source radioenv/bin/activate')

Я пытаюсь использовать «source radioenv / bin / activ» для активации виртуальной среды, к сожалению, os.system создает подпроцесс для выполнения команды.Изменения среды, сделанные при активации, исчезают вместе с подпроцессом, это не влияет на процесс Python.Здесь возникает проблема, как я могу выполнить некоторую контекстно-зависимую последовательность команд в Python?

Другой пример:

system("cd foo")
system("./bar")

Здесь компакт-диск не влияет на следующую систему (". Bar").Как заставить контекст этой среды жить в разных командах?

Есть ли что-то вроде контекстно-зависимой оболочки?Так что я могу написать такой код на Python:

shell = ShellContext()
shell.system("cd bar")
shell.system("./configure")
shell.system("make install")
if os.path.exists('bar'):
    shell.system("remove")

Спасибо.

Ответы [ 2 ]

3 голосов
/ 27 июня 2010

Чтобы активировать virtualenv из Python, используйте сценарий activate_this.py (который создается с помощью virtualenv) с execfile.

activate_this = os.path.join("path/to/radioenv", "bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
1 голос
/ 28 июня 2010

Вы пытаетесь использовать Python в качестве оболочки?

Параллельно с ответом Даниэля Роузмана, который кажется самой большой частью того, что вам нужно, обратите внимание:

shell.system("cd bar")

пишется в Python как:

os.chdir("bar")

Проверьте модуль os для других функций, которые вам нужны, например, rmdir, remove и mkdir.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...