我有三个python脚本,job.py
,control1
和control2
job.py
文件是另一个项目的一部分,并假设我无权修改它。
...
execfile(self.control, global_control_vars, global_control_vars)
...
self.control
保存control1
import imp,os
a='path/to/control2'
imp.load_source('control2',a)
...
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 ++这样的语言中进行预处理一样?也就是说,来自该位置的代码被“粘贴”在声明的位置。答案 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
。