Using Python to open a shell environment, run a command and exit environment(使用Python打开shell环境,运行命令并退出环境)
问题描述
我正在尝试使用 python 自动化一个过程.如果我只是在终端中,则工作流程如下所示:
I'm trying to automate a process using python. If I am just in the terminal the workflow looks like:
user:> . /path/to/env1.sh
user:> python something.py
user:> exit
user:> . /path/to/env2.sh
user:> python something2.py
user:> exit
等更多步骤.每个 env.sh
都会生成一个新脚本,其中包含大量环境变量以及当前目录中未设置的内容.我很确定我需要使用子流程,但我不确定如何去做.理想情况下,工作流程应该是:打开新的 shell --> 运行一些命令 --> 退出 shell --> 必要时重复.
etc for a few more steps. Each env.sh
spawns a new script with a whole slew of environment variables and whatnot set within the current directory. I'm pretty sure I need to use subprocess, but I'm not exactly sure how to go about it. Ideally the workflow would go: open new shell --> run some commands --> exit shell --> repeat as necessary.
似乎需要澄清一下.我了解如何使用 subprocess.Popen()
和 subprocess.call()
从调用 Python 脚本的 shell 中调用事物.这不是我需要的.当一个人调用 env.sh
时,它会设置一大堆环境变量和一些其他相关的东西,然后把你放到一个 shell 中运行命令.重要的是要注意 env.sh
不会终止,直到一个类型 exit
在运行所需的命令后.使用 subprocess.call("./env.sh", shell = True)
打开 shell 并停在那里.就像输入命令 ./env.sh
一样,除了当发出 exit
命令时,其余的 python 脚本.所以:
It seems some clarification is needed. I understand how to use subprocess.Popen()
and subprocess.call()
to call things from within the shell that the Python script was called from. This is not what I need. When one calls env.sh
it sets a whole ton of environment variables and a few other pertinent things and then drops you into a shell to run commands. It is important to note env.sh
does not terminate until one types exit
after running desired commands. Using subprocess.call("./env.sh", shell = True)
opens the shell and stops there. It is just like entering the command ./env.sh
except that when one issues the exit
command, the rest of the python script. So:
subprocess.call(". /path/to/env.sh", shell = True)
subprocess.call("python something.py", shell = True)
不做我需要做的事,也不做:
Does NOT do what I need it to do, nor does:
p = subprocess.Popen(". /path/to/env.sh", shell = True)
subprocess.call("python something.py", shell = True)
p.kill()
推荐答案
据我了解,您想运行一个命令,然后将其传递给其他命令:
As I understand you want to run a command and then pass it other commands:
from subprocess import Popen, PIPE
p = Popen("/path/to/env.sh", stdin=PIPE) # set environment, start new shell
p.communicate("python something.py
exit") # pass commands to the opened shell
这篇关于使用Python打开shell环境,运行命令并退出环境的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用Python打开shell环境,运行命令并退出环境


- 我如何卸载 PyTorch? 2022-01-01
- YouTube API v3 返回截断的观看记录 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- 我如何透明地重定向一个Python导入? 2022-01-01
- 计算测试数量的Python单元测试 2022-01-01