Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python在终端中执行一系列命令_Python_Shell_Python 3.x_Terminal_Virtualenv - Fatal编程技术网

如何使用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
),您可能需要安装您想要的:

  • workon envname
    将获取文件并激活VirtualNV

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

。激活
这是什么?为什么不创建一个shell脚本?使用Python有什么意义?顺便说一句,它是
/激活
,而不是
。激活
。你能教我们如何使用Shell脚本来完成这项工作吗?如果你告诉我们你想完成什么,这会有所帮助。虽然让python脚本激活virtualenv是一种选择,但有许多(可以说更好)的选择,比如让python直接调用virtualenv应用程序,以及其他一些选择。那么,你想运行的虚拟电视中有什么?
$ workon <virtualenv-name>