0

私は 3 つの Python スクリプトを持っていjob.pyますcontrol1control2

ファイルは別のプロジェクトのjob.py一部であり、変更する権限がないと想定しています。

仕事.py

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

self.controlへの絶対パスを保持しますcontrol1

コントロール1

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)
...

今問題jobです。control2 のは、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の名前空間に持ち込む方法はありますか?control1control2

また

  • control2C/C++ などの言語で前処理が行われるように、コード [ ]をインポートする方法はありcontrol1ますか?つまり、その場所のコードがステートメントの場所に「貼り付け」られます。
4

1 に答える 1

1

を変更できる場合は、それを の関数にcontrol1渡したり、モジュールのグローバル変数として設定したりできます。jobcontrol2jobcontrol2

たとえば、ファイルを次のように設定すると、次のようになります。

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

于 2013-06-06T15:32:31.860 に答える