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

Когда я импортирую один из моих скриптов на Python и запускаю свой текущий скрипт, он, кажется, работает и отображает вывод импортированного скрипта, что действительно необычное поведение. Я только что импортировал это в мой скрипт, но не вызвал ни одной из его функций в моем основном коде. Как я могу избежать такого поведения?

Если я передам флаг -d с моим основным сценарием, он будет запускать обычный код только в моем основном сценарии

Если я передам флаг -t с моим основным сценарием, он запустит код только из импортированного сценария Python

main.py

import os
import argparse
import functions as funcs
import generate_json as gen_json
from test_compare_filesets import tester as imptd_tester


def get_json_location():
    path = os.getcwd() + '/Testdata'
    return path


def main():

 parser = argparse.ArgumentParser()
 parser.add_argument("-d", "--export-date", action="store_true", required=True)
 parser.add_argument("-t", "--execute-test", action="store_true", required=False)
 args = parser.parse_args()
 date = args.export_date
 testt = args.execute_test

 yml_directory = os.listdir('yaml/')
 yml_directory.remove('export_config.yaml')



 with open('dates/' + date + '.json', 'w') as start:
  start.close()

 for yml in yml_directory :
   print("Running export for " + yml)
   yml_file = os.path.join('yaml/' + yml)

   json_path = get_json_location()
   yml = funcs.read_config(yml_file)
   data_folder = date
   gen_json.generate_data_report(json_path , yml , data_folder)


if __name__ == '__main__':


   main()

test_files.py

import generate_report as generate_reportt


def compare_filesets(file_names, previous_data, current_data):
    for item in file_names:
        print(item + generate_reportt.compare(previous_data.get(item), current_data.get(item)) + "\n")


def test_filesets():

 '''
Test for scenario 1
'''

dict_1 = generate_reportt.read_file_into_dict("dates/2018-01-01.json")
dict_2 = generate_reportt.read_file_into_dict("dates/2018-01-02.json")
print(" Test 1 ")
compare_filesets(file_names=['a.json', 'b.json', 'c.json'],
                 previous_data=dict_1,
                 current_data=dict_2
                 )

1 Ответ

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

Вот почему используется выражение:

if __name__ == "__main__":
    main()

очень важно. Вы захотите добавить это в скрипт, который вы импортируете, и поместить весь код, который вызывается, в функцию main() в этом скрипте. Переменная __name__ скрипта изменяется в зависимости от того, импортирован скрипт или нет. Если вы не импортируете скрипт и не запускаете его, переменная __name__ этого скрипта будет "__main__". Однако, если он импортирован, переменная __name__ превращается в имя файла сценария, и поэтому все функции main() этого сценария не будут выполняться.

Для получения дополнительной информации: Что делать, если __name__ == "__main__": do?

...