尝试执行包含load_source的脚本时出错

时间:2013-06-06 11:28:43

标签: python exec

我有三个python脚本,job.pycontrol1control2

job.py文件是另一个项目的一部分,并假设我无权修改它。

job.py

...  
execfile(self.control, global_control_vars, global_control_vars)
...

self.control保存control1

的绝对路径

CONTROL1

import imp,os
a='path/to/control2'
imp.load_source('control2',a)

控制2

...
for i in tests:
    job.run_test('pax', test = i, tag = i, archive = ARCHIVE)
...

现在问题.control2中的job位于job.py的命名空间中。当执行代码job.py时,我收到以下错误。

File "job.py", line 1170, in   step_engine
  execfile(self.control, global_control_vars, global_control_vars)
File "tests/linux-tools/control1", line 18, in <module>
  imp.load_source('control',a)
File "tests/linux-tools/pax/control2", line 22, in <module>
  job.run_test('pax', test = i, tag = i, archive = ARCHIVE)
NameError: name 'job' is not defined

(路径名称已缩短)

  • 有没有办法将job纳入执行control1的{​​{1}}的命名空间?

OR

  • 有没有办法将代码[control2]导入control2就像在C / C ++这样的语言中进行预处理一样?也就是说,来自该位置的代码被“粘贴”在声明的位置。

1 个答案:

答案 0 :(得分:1)

如果您可以更改control1,则可以将job传递给control2中的函数,或将job设置为control2上的全局变量1}}模块。

例如,以这种方式设置文件:

job.py

#!/usr/bin/env python2.7

job = 'hi'
execfile('control1', globals(), globals())

control2

def run():
    print job

control1

import imp, os
a = 'control2'
control2 = imp.load_source('control2', a)
control2.job = job
control2.run()

然后运行job.py会导致control2打印hi

相关问题