如何使用python在终端中执行一系列命令

时间:2015-01-07 03:04:46

标签: python shell python-3.x terminal virtualenv

我在我的python_go.py

中添加了以下内容
import os
os.system("cd some_dir") # This is the directory storing an existing virtual environment
os.system(". activate") #because I want to activate the virtual environment
os.system("cd another_dir") #this the directory I can start my work

我希望我可以运行python_go.py,它可以完成上面提到的工作。

但是当我运行它时,它似乎只能做第一步,其余部分,例如. activate似乎无效。

有人可以告诉我该怎么做吗?谢谢!!

4 个答案:

答案 0 :(得分:0)

如果你依赖os.system(“。activate”)来工作,如果它在some_dir目录中不起作用,因为当前目录不会在对os.system()的调用中持续存在。

你最好调用一个shell脚本来聚合你想要做的所有三个命令,并从python脚本执行一次。

否则,您需要在激活调用上调用os.system之前使用os.chdir()为父python进程设置环境。此外,os.system(“。activate”)调用将不会执行您想要的操作,因为“点空间”符号将信息加载到一个shell中,当os.system调用完成时它将消失。

编辑(对你的后续评论):

您的shell脚本应如下所示(do_activate.sh):

cd some_dir
. activate
cd another_dir

和这样的python代码:

使用os.system( “db_activate.sh”)。

请记住,在os.system调用之后,“。activate”保存的任何环境变量都不会保留。

答案 1 :(得分:0)

很可能您不必更改为some_dir来源activate,因此请保存这些行

. some_dir/activate
cd another_dir

as,让我们说go.sh并做

. go.sh

具有相同的效果

答案 2 :(得分:0)

您的代码什么都不做。 os.system()为每个命令启动一个新shell,即所有os.system()个调用都没有正面效果:cd. activate可能只对当前 shell(可能是它的孩子)。

如果您只想在当前shell中激活virtualenv,那么您应该使用shell命令:

$ . some_dir/activate && cd another_dir

注意:该命令仅对当前(正在运行的)shell(及其后代)有效。

virtualenvwrapper提供了几个允许在激活virtualenv之前/之后执行命令的钩子,例如,你可以将cd another_dir放入$VIRTUAL_ENV/bin/postactivate然后就可以运行了:

$ workon <virtualenv-name>

激活virtualenv-name virtualenv并运行所有挂钩(在这种情况下为cd another_dir)。

答案 3 :(得分:0)

您可能希望安装符合您需要的virtualenvwrapper

  • workon envname将获取文件并激活virtualenv。

然后,您可以在所需目录中执行setvirtualenvproject,然后您将自动转到项目所在的目录。你只需要执行一次这个命令,然后从那时起自动发生。