问题:假设我有脚本A
,B
和C1
,C2
,... CN
。
脚本B
源于脚本A
,该脚本包含多个环境变量和函数,然后调用依赖它们的C
脚本。
现在,假设我想用python程序替换bash脚本B
。
如果我只想一次“来源” A
(而不是在每次C
调用之前),该怎么做?
我希望能够分别“处理”每个C,即在每个C执行之后运行一些python代码,因此创建一些大的". A && C1 && C2 ..."
命令是不会的。
答案 0 :(得分:0)
我不确定这是否会回答问题,因为我认为您编写它的方式仍不清楚,但是您可以使用此代码段解析bash脚本并从python运行它们,同时捕获每一行的输出,因此它可能会给您一个起点
import subprocess
def start_process(command=''):
return subprocess.Popen(command.split(' '), stdout=subprocess.PIPE, shell=False,
creationflags = 0x08000000)
with open('yourscript.sh','rt') as f:
lines = f.read().split('\n')
output=[str(start_process(line).communicate()[0]) for line in lines]
通过这种方式,您可以构建一个结构,在该结构中python脚本协调bash脚本,而不是在合理的情况下保持平等
答案 1 :(得分:0)
在您的Python程序中嵌入bash
解释器的简短操作(这不是现实的选择; bash
并非旨在做到这一点),最简单的方法是编写包装器外壳脚本源A
,然后使用exec
运行Python脚本。在exec
之后,您的Python脚本将保持与包装器相同的环境,包括在A
中找到的所有内容:
# wrapper script
source A
exec B.py
在B.py
中,每个Ci
脚本将通过A
的环境继承B.py
中定义的变量。
另一种选择是将A
移植到B.py
可以直接导入的Python模块中。你会改变
export x=foo
export y=1
进入
import os
os.environ["x"] = "foo"
os.environ["y"] = "1"
取决于A
的实际参与程度,移植可能并不容易,这就是为什么我建议首先使用exec
进行包装的原因。