Как импортировать сценарий python, который требует аргументов командной строки перед импортом? - PullRequest
0 голосов
/ 05 августа 2020

Привет, я пытаюсь выполнить модульное тестирование сценария python, требующего аргументов командной строки. Это класс AWS склеивания, но все еще чистый python.

Вот мой модульный тест:

import sys
import unittest

import src.UnzipFile # Fails Here


class TestUnzipFile(unittest.TestCase):


    def test_unzipping_file(self):

        """
        Tests that it can unzip a tar.gz file
        """


if __name__ == "__main__":
    try:
        unittest.main()
    except Exception:
        TestUnzipFile().tearDownClass()

Вот начало сценария, который я пытаюсь импортировать (короткая версия):

args = getResolvedOptions(sys.argv,

                              [
                                  's3_bucket',
                                  'archive_path',
                                  'destination_path',
                              ])

bucket_name = args['s3_bucket']

tar_file_path = args['archive_path']


if __name__ == "__main__":
    main()

После попытки импорта скрипта я получаю следующую ошибку:

awsglue.utils.GlueArgumentError: the following arguments are required: --s3_bucket, --archive_path, --destination_path,

Документации по модульному тестированию AWS клея не так много jobs, и когда задание склеивания настроено, вы не можете использовать переменные среды. Какие бы параметры вы ни использовали, они должны быть аргументами. Итак, мой вопрос заключается в том, как я могу импортировать сценарий python, требующий передачи аргументов?

1 Ответ

0 голосов
/ 06 августа 2020

См. Шаг 5 в этом do c. Он столкнулся с точной проблемой, и у него была работа, когда вам нужно было поместить код стороны Glue в функцию и написать следующий код, чтобы он выполнялся только тогда, когда его собственный код вызывается в качестве точки входа, как показано ниже:

if __name__ == '__main__':
    main(sys.argv)

PS: блог ведется на японском языке, и вы можете преобразовать его в английский sh, чтобы лучше понимать его.

...