我有一个基本的采购功能:
def source(
fileName = None,
update = True
):
pipe = subprocess.Popen(". {fileName}; env".format(
fileName = fileName
), stdout = subprocess.PIPE, shell = True)
data = pipe.communicate()[0]
env = dict((line.split("=", 1) for line in data.splitlines()))
if update is True:
os.environ.update(env)
return(env)
当我尝试使用它来源特定的脚本时,我会收到以下错误:
>>> source("/afs/cern.ch/sw/lcg/contrib/gcc/4.8/x86_64-slc6/setup.sh")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 9, in source
ValueError: dictionary update sequence element #51 has length 1; 2 is required
这是由可执行文件
env
返回的以下行引起的:BASH_FUNC_module()=() { eval `/usr/bin/modulecmd bash $*`
}
闭合链括号在第51行。
如何以健壮、明智的方式从Python中调用Bash脚本,以避免出现这样的错误(和其他可能想到的任何错误)?
__init__.py
的文件)。我会尝试回答你的问题,但是你所陈述的目标对我来说没有意义。我不知道一个Python脚本如何创建一个Python模块。除非你在脚本中动态地在文件系统中创建文件。 - Alexander Bird