2016-02-06 4 views
-1

У меня есть несколько сценариев (с именем one.py и two.py), циркулярно вызывающих друг друга с помощью execfile. В one.py (который запускается один) есть некоторый код (initialize), который я хотел бы выполнить только один раз.Инициализация только один раз

Я хотел бы продолжать использовать ExecFile если возможно

Как я могу добиться этого?

#one.py 
def initialize():   
    # initializing 

initialize() 

# do the main work 

execfile('two.py') 

---------------------------- 

#two.py 

# do some work 

execfile('one.py') 
+0

Переместить код из one.py в ExecFile. –

+0

'def (initialize):' должен быть 'def initialize():'? –

+0

Либо создайте третий файл, который выполняет инициализацию, и вызовет two.py или использует некоторое хранилище (например, базу данных, временный файл), в котором хранится состояние «было инициализировано» или «не было инициализировано». –

ответ

2

Почему бы не создать третий файл zero.py, который запускает инициализацию, а затем выполняет one.py, который затем выполняет цикл.

#zero.py 
def initialize(): 
# do some initializing 

initialize() 

execfile('one.py') 

В другом примечании, вероятно, должны быть лучшие способы запуска вашего кода, а затем этот цикл execfile.

+0

К сожалению, функция initialize вызывает другие функции и использует переменные, которые находятся в one.py – user1530405

+0

Не могли бы вы импортировать one.py в zero.py, а затем использовать эти переменные и функции? – Skirrebattie

+0

Затем создайте временный файл и сохраните свое состояние там. –

0

Возможно, вы можете определить класс, который выполняет ваши задачи?

Например, что-то вроде:

from itertools import cycle 

class TaskRunner(object): 

    def __init__(self): 
     self.tasks = ('one.py', 'two.py') 

     # do some initializing 

    def run_continuously(self): 
     for filepath in cycle(self.tasks): 
      execfile(filepath) 


# to run: 
task_runner = TaskRunner() 
tsak_runner.run() 

---------------------------- 

#one.py 

# do the main work (without initializing) 


---------------------------- 

#two.py 

# do some work 

---------------------------- 
Смежные вопросы