我正在尝试使用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脚本都生成一个带有大量环境变量以及当前目录中未设置内容的新脚本。我很确定我需要使用子流程,但是我不确定该如何进行。理想情况下,工作流程应为:打开新外壳->运行一些命令->退出外壳->根据需要重复。
env.sh
编辑:似乎需要澄清。我了解如何在调用Python脚本的外壳内使用subprocess.Popen()和subprocess.call()调用事物。这不是我所需要的。调用env.sh它时,它会设置大量的环境变量和其他一些相关的内容,然后将您放入一个shell中以运行命令。重要的是要注意env.sh,exit在运行所需命令后,只有一种类型的设备才终止。使用subprocess.call("./env.sh", shell =True)打开外壳并停在那里。就像输入命令一样,./env.sh只不过当一个人发出exit命令时,其余的就是python脚本。所以:
subprocess.Popen()
subprocess.call()
exit
subprocess.call("./env.sh", shell =True)
./env.sh
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()
据我了解,您想运行一个命令,然后将其传递给其他命令:
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