如何使用python在终端中执行一系列命令
我将以下内容放入我的如何使用python在终端中执行一系列命令,python,shell,python-3.x,terminal,virtualenv,Python,Shell,Python 3.x,Terminal,Virtualenv,我将以下内容放入我的python\u 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
python\u 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\u go.py
,它可以完成上面提到的工作
但当我运行它时,它似乎只能执行第一步,其余的步骤,例如。激活
似乎不起作用
有人能告诉我怎么做吗?谢谢 如果您依赖os.system(“.activate”)工作,如果它在目录中,则某些目录将无法工作,因为当前目录不会在对os.system()的调用中保持不变 您最好调用一个shell脚本,该脚本聚合了您想要执行的所有三个命令,并从python脚本执行一次 否则,在调用activate调用os.system之前,您需要使用os.chdir()为父python进程设置环境。另外,os.system(“.activate”)调用不会执行您想要的操作,因为“点空间”符号将把信息加载到shell中,当os.system调用完成时,shell将消失 已编辑(您的后续评论): 您的shell脚本应该如下所示(do_activate.sh): python代码如下所示: 操作系统(“db_activate.sh”)
请记住,.activate保存的任何环境变量在os.system调用后都不会持续。很可能您不必更改为
某些目录
到源代码激活
,因此保存这些行
. some_dir/activate
cd another_dir
比如,让我们说go.sh
和doing
. go.sh
具有相同的效果您的代码什么也不做
os.system()
为每个命令启动一个新的shell,即所有os.system()
调用都没有积极的效果:cd
和。激活
可能仅对当前shell(可能还有它的子shell)有效
如果您只想在当前shell中激活virtualenv,则应使用shell命令:
$ . some_dir/activate && cd another_dir
注意:该命令仅对当前(正在运行的)shell(及其子体)有效
提供几个挂钩,允许在激活virtualenv之前/之后执行命令,例如,您可以将cd另一个\u dir
放入其中,这样就可以运行:
$ workon <virtualenv-name>
$workon
要激活
virtualenv name
virtualenv并运行所有钩子(cd-other\u-dir
),您可能需要安装您想要的:
将获取文件并激活VirtualNVworkon envname
然后,您可以在所需目录中执行
setvirtualenvproject
,并自动转到项目所在的目录。您只需执行此命令一次,因为从那时起它将自动执行。。激活
这是什么?为什么不创建一个shell脚本?使用Python有什么意义?顺便说一句,它是/激活,而不是。激活
。你能教我们如何使用Shell脚本来完成这项工作吗?如果你告诉我们你想完成什么,这会有所帮助。虽然让python脚本激活virtualenv是一种选择,但有许多(可以说更好)的选择,比如让python直接调用virtualenv应用程序,以及其他一些选择。那么,你想运行的虚拟电视中有什么?
$ workon <virtualenv-name>