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

how to use python to do a series of commands in terminal

我将以下内容放入 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 似乎不起作用。

谁能告诉我怎么做?谢谢!!

如果你依赖 os.system(".activate") 在目录 some_dir 中工作,那将无法工作,因为当前目录不会在调用时持续存在os.system().

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

否则,您希望在激活调用 os.system 之前使用 os.chdir() 为父 python 进程设置环境。此外, os.system(".activate") 调用不会执行您想要的操作,因为 "dot space" 表示法会将信息加载到 shell 中,当 os.system 通话结束。

已编辑(对您的后续评论):

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

cd some_dir
. activate
cd another_dir

和 python 代码如下:

os.system("db_activate.sh").

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

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

. some_dir/activate
cd another_dir

作为,让我们说 go.sh 并做

. go.sh

效果相同

您的代码没有执行任何操作。 os.system() 为每个命令启动一个新的 shell 即所有 os.system() 调用都没有积极影响:cd. activate 可能只对 current shell(可能还有它的 children)。

如果你只想在当前 shell 中激活一个虚拟环境,那么你应该使用 shell 命令:

$ . some_dir/activate && cd another_dir

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

virtualenvwrapper provides several hooks that allows to execute commands before/after activating a virtualenv e.g., you could put cd another_dir into $VIRTUAL_ENV/bin/postactivate 那就够了 运行:

$ workon <virtualenv-name>

激活 virtualenv-name virtualenv 和 运行 所有挂钩(在本例中为 cd another_dir)。

您可能想要安装 virtualenvwrapper 来满足您的需求:

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

然后您可以在所需目录中执行setvirtualenvproject,您将自动转到项目所在的目录。您只需执行此命令一次,因为它会从那时起自动执行。