使用Python打开shell环境,运行命令并退出环境

10 投票
5 回答
39712 浏览
提问于 2025-04-17 20:43

我正在尝试用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 个回答

-2

这段代码是一个示例,展示了如何在编程中使用某些功能。它可能涉及到一些基本的操作,比如变量的定义、函数的调用或者是条件判断等。对于初学者来说,理解这些基本概念是非常重要的,因为它们是编程的基础。

在这段代码中,可能会看到一些常见的编程元素,比如循环、数组或者是字符串处理。这些都是编程中经常用到的工具,掌握它们可以帮助你更好地解决问题。

如果你对这段代码有疑问,可以尝试逐行分析,看看每一行的作用是什么,或者在网上查找相关的资料来加深理解。记住,编程是一个不断学习和实践的过程,不要害怕犯错,勇敢尝试就好。

p = subprocess.Popen(". /path/to/env.sh", shell = True, stdout=subprocess.PIPE).communicate()
subprocess.call("python something.py", shell = True).communicate()
0

这里有一个帮助链接给你参考....

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

6

subprocess 调用(特别是 Popen)接受一个 env 参数,这个参数是环境变量和它们对应值的一个映射。你可以使用这个功能。例如:

env = {'FOO': 'Bar', 'HOME': '/path/to/home'}
process = subprocess.Popen(['python', 'something.py'], env=env)

当然,通常情况下,直接在导入 something.py 之后调用一些函数会更好,而不是启动一个全新的进程。

8

你可以使用 subprocess 这个模块:

>>> import subprocess
>>> subprocess.call('python something.py', shell = True)

或者你也可以使用 os 这个模块:

>>> import os
>>> os.system('python something.py')

这里有个例子(记得打开你的音响):

>>> import os
>>> os.system('say Hello')
8

我理解你是想先运行一个命令,然后再把其他命令传递给它:

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

撰写回答