Как остановить импорт Python от запуска первым и запускаться только при вызове в коде - PullRequest
0 голосов
/ 18 января 2019

В настоящее время я импортирую скрипт Python в мой основной файл Python. Когда я импортирую скрипт и запускаю основной скрипт через командную строку, импортированные скрипты, кажется, сначала запускаются и отображают вывод, а затем мой основной скрипт запускается после этого. У меня нет main () в моем импортированном скрипте и только это в моем основном скрипте. Мой код выглядит следующим образом:

import argparse
from test_compare_filesets import testing


def main():


 print("export_data is the main file")


 parser = argparse.ArgumentParser()
 parser.add_argument("-d", "--export-date", action="store_true", required=False)
 parser.add_argument("-t", "--execute-test", action="store_true", required=False)

 args = parser.parse_args()

 if args.execute_test :
     print "Test Mode"
     testing()

 if args.export_date :
     print "Normal Mode"


if __name__ == '__main__':
    main()
else:

    print ("DIE EXPORT_DATA")

Ответы [ 2 ]

0 голосов
/ 18 января 2019

пока это мой код. По сути, при запуске скрипта python с флагом -t это вернет все из test_compare_filesets и распечатает на терминал, где, если передан флаг -d, он просто выведет «Нормальный режим». Я, кажется, получаю RunTimeError с этой проблемой, говоря: «RuntimeError: максимальная глубина рекурсии превышена при вызове объекта Python:

import argparse
from test_compare_filesets import testing

def main():



    parser = argparse.ArgumentParser()
    parser.add_argument("-d", "--export-date", action="store_true", required=False)
    parser.add_argument("-t", "--execute-test", action="store_true", required=False)

    args = parser.parse_args()

    if args.execute_test :
        print "Test Mode"
        testing()

    else:
        print "Normal Mode"


if __name__ == '__main__':
    main()
else:

    print ("DIE EXPORT_DATA")
0 голосов
/ 18 января 2019

Когда вы вызываете from test_compare_filesets import testing в вашем основном файле, модуль test_compare_filesets.py запускается. Когда функции определены, а затем запущена последняя часть:

if __name__ == '__main__':
    testing()
else:
    print "DIE COMPARE FILSETS"

Поскольку этот модуль импортируется, его атрибут __name__ имеет значение , а не "__main__", поэтому выполняется условие else, которое выдает DIE COMPARE FILSETS. После этого импорта ваш главный скрипт определяет свои собственные функции. Поскольку ваш основной скрипт имеет __name__ как "__main__", он запускает функцию main() и печатает export_data is the main file. Следовательно, вы ожидаете следующий результат:

$ python main_script.py
DIE COMPARE FILSETS
export_data is the main file

(с последующими отпечатками во время функции main().

...