使用Python打开shell环境,运行命令并退出环境
我正在尝试用Python自动化一个过程。如果我只是在终端里,整个流程看起来是这样的:
user:> . /path/to/env1.sh
user:> python something.py
user:> exit
user:> . /path/to/env2.sh
user:> python something2.py
user:> exit
接下来还有几个步骤。每个 env.sh
都会在当前目录下生成一个新的脚本,并设置一堆环境变量等等。我觉得我需要用到subprocess模块,但我不太确定该怎么做。理想情况下,流程应该是:打开一个新的shell --> 运行一些命令 --> 退出shell --> 根据需要重复这个过程。
补充说明:似乎需要一些澄清。我知道如何使用 subprocess.Popen()
和 subprocess.call()
从Python脚本所在的shell中调用命令。但这并不是我需要的。当调用 env.sh
时,它会设置很多环境变量和其他相关的东西,然后让你进入一个shell来运行命令。需要注意的是,env.sh
不会结束,直到你在运行完想要的命令后输入 exit
。使用 subprocess.call("./env.sh", shell = True)
会打开shell,但就停在那里。这就像直接输入命令 ./env.sh
一样,只是当你输入 exit
命令后,Python脚本的其余部分才会继续执行。所以:
subprocess.call(". /path/to/env.sh", shell = True)
subprocess.call("python something.py", shell = True)
这并不能满足我的需求,下面的代码也一样:
p = subprocess.Popen(". /path/to/env.sh", shell = True)
subprocess.call("python something.py", shell = True)
p.kill()
5 个回答
这段代码是一个示例,展示了如何在编程中使用某些功能。它可能涉及到一些基本的操作,比如变量的定义、函数的调用或者是条件判断等。对于初学者来说,理解这些基本概念是非常重要的,因为它们是编程的基础。
在这段代码中,可能会看到一些常见的编程元素,比如循环、数组或者是字符串处理。这些都是编程中经常用到的工具,掌握它们可以帮助你更好地解决问题。
如果你对这段代码有疑问,可以尝试逐行分析,看看每一行的作用是什么,或者在网上查找相关的资料来加深理解。记住,编程是一个不断学习和实践的过程,不要害怕犯错,勇敢尝试就好。
p = subprocess.Popen(". /path/to/env.sh", shell = True, stdout=subprocess.PIPE).communicate()
subprocess.call("python something.py", shell = True).communicate()
这里有一个帮助链接给你参考....
1)
from subprocess import call
call(["ls", "-l"])
2)
import os
os.system("command")
举个例子:
import os
f = os.popen('date')
now = f.read()
print "Today is ", now
要启用终端,你可以导入os
模块:
import os
os.system('python script.py')
或者像前面提到的,你也可以使用import subprocess
subprocess
调用(特别是 Popen
)接受一个 env
参数,这个参数是环境变量和它们对应值的一个映射。你可以使用这个功能。例如:
env = {'FOO': 'Bar', 'HOME': '/path/to/home'}
process = subprocess.Popen(['python', 'something.py'], env=env)
当然,通常情况下,直接在导入 something.py
之后调用一些函数会更好,而不是启动一个全新的进程。
你可以使用 subprocess
这个模块:
>>> import subprocess
>>> subprocess.call('python something.py', shell = True)
或者你也可以使用 os
这个模块:
>>> import os
>>> os.system('python something.py')
这里有个例子(记得打开你的音响):
>>> import os
>>> os.system('say Hello')
我理解你是想先运行一个命令,然后再把其他命令传递给它:
from subprocess import Popen, PIPE
p = Popen("/path/to/env.sh", stdin=PIPE) # set environment, start new shell
p.communicate("python something.py\nexit") # pass commands to the opened shell