Я сделал файл, который превращается в другие файлы и запускает их скрипты последовательно. Большинство этих файлов имеют общий параметр, который является входом. Когда я импортирую его, он (конечно) запрашивает ввод. Я хочу избежать повторного ввода чего-то.
Пример:
MainFile.py:
import Base_params
import Liner
Base_params.py:
no_of_slices=int(input('Enter no. of Slices'))
sub_slice=int(input('enter sub slice'))
Liner.py:
from PIL import Image
import shutil
from Base_params import no_of_slices, sub_slice
Короткий ответ заключается в том, что Python обрабатывает это для вас уже точно так, как вы хотите. Чтобы понять, почему, позвольте мне рассказать вам немного о системе импорта.
Когда модуль импортируется в первый раз, создается пустой объект модуля. Затем выполняется его код, и любые имена, которые вы связываете, помещаются в его словарь, который также является глобальным пространством имен для модуля. В вашем случае это будет означать запуск кода Base_params.py
и создание имен no_of_slices
и sub_slice
на основе пользовательского ввода.
Когда тот же самый модуль импортируется впоследствии, его код не запускается (что вас беспокоит). Вместо этого возвращается ссылка на объект из sys.modules
. Оператор import всегда проверяет, загружен ли модуль, прежде чем пытаться запустить его снова.
Причина, по которой создание пустого объекта модуля (и размещение его в sys.modules
перед запуском кода модуля очень важно, - это то, что большинство модулей имеют рекурсивный импорт). Маркировка модуля как уже импортированного гарантирует, что все бесконечные циклы будут разбиты до того, как они произойдут.
В вашем случае отлично определить модуль констант, который запрашивает ввод пользователя. Первый модуль, который import Base_params
, инициирует выполнение input
инструкций. Все последующие вхождения import Base_params
будут просто связывать sys.modules['Base_params']
с любым именем Base_params
в вашем пространстве имен. Второго запроса для no_of_slices
и sub_slice
.
Ссылки на официальную документацию, которую я предоставил, объяснят все, что я пропустил.