如何使用 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
,您将自动转到项目所在的目录。您只需执行此命令一次,因为它会从那时起自动执行。
我将以下内容放入 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
,您将自动转到项目所在的目录。您只需执行此命令一次,因为它会从那时起自动执行。