2016-05-19 6 views
1

Предположим, что я написал скрипт, который делает morning.py простым оператором печатиВключите питон скрипт в функцию

# morning.py 
print 'Good morning' 

Несколько часов спустя я понял, что я должен использовать этот сценарий в другом сценарии с именем evening.py. Я знаю два варианта. Во-первых, чтобы вызвать morning.py как подпроцесс

# evening.py 
import subprocess 
import shlex 
process = subprocess.Popen(shlex.split('python morning.py')) 
process.communicate() 

Это путь я изначально выбрал. Проблема в том, что я хочу упаковать свою программу (morning + evening) в один исполняемый файл. И, на мой взгляд, из exe-файла такой звонок просто не сработает.

Другой вариант - включить модуль morning в функцию. Например, как этот

# morning.py 
def morning_func(): 
    print 'Good morning' 

Тогда я могу просто вызвать эту функцию из модуля evening

# evening 
import morning 
morning.morning_func() 

Здесь проблема в том, что в отличие от morning мой фактический первоначальный сценарий вполне выдвинутым и неаккуратно. Нет единственной функции, которую я могу выполнить для имитации потока сценариев. Обертка всего скрипта в функции просто не кажется правильным.

Каковы возможные решения?

+3

Там абсолютно * не * хорошо причина запуска сценария Python из другого через Popen. Почему вы не можете просто импортировать его как есть? –

+1

Рефакторинг 'Утром', так что он имеет основную функцию. –

+0

@ DanielRoseman Предположим, что в 'вечернем скрипте я добавил строку' import morning'. Как мне получить приветствие «Доброе утро» из «вечера»? –

ответ

1

Общее использование - всегда объявлять функции (и/или классы) в модуле, который может использоваться другими модулями, и добавить в конце тест if __name__ == '__main__':, чтобы непосредственно выполнить что-то, если скрипт вызывается напрямую.

В вашем примере, это не даст:

# morning.py 
def morning_func(): 
    print 'Good morning' 

if __name__ == '__main__': 
    morning_func(): 

Таким образом, вы можете выполнить его просто как python morning.py или включить его в другие файлы Python вызвать morning_func оттуда

+0

Это не касается непосредственно моего вопроса, но может быть полезным для других. –

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

  • Нет связанных вопросов^_^