如何在Python中运行上下文感知命令?

时间:2010-06-27 18:50:17

标签: python unix shell command-line

我想用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 / activate”来激活虚拟环境,不幸的是,os.system创建了一个用于执行命令的子进程。由activate生成的环境更改随子进程消失,不会影响Python进程。问题出现了,如何在Python中执行一些上下文感知命令序列?

另一个例子:

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

这里cd不影响以下系统(“.bar”)。如何使这些环境上下文存在于不同的命令中?

有类似上下文感知的shell吗?这样我就可以编写一些像这样的Python代码:

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

感谢。

2 个答案:

答案 0 :(得分:3)

要从Python中激活virtualenv,请使用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 :(得分:1)

您是否尝试将Python用作shell?

与丹尼尔罗斯曼的答案并行,这似乎是你需要的最大部分,请注意:

shell.system("cd bar")

拼写为Python:

os.chdir("bar")

查看os模块,了解您似乎需要的其他功能,例如rmdirremovemkdir