Ошибка имени при запуске сценария Python через Bash

Я пытаюсь запустить некоторые файлы python (Django) через Bash (для некоторых cronjobs); однако я сталкиваюсь с некоторыми странными ошибками. Установка представляет собой скрипт .sh, который я запускаю с помощью bash, который загружает некоторые исходные файлы & затем запускает файл python через Django Shell. Для демонстрации я закомментировал некоторые части сценария bash, который я использовал во время тестирования.

Bash Script


    #!/bin/bash
    
    source /home/grlaer/Desktop/mensam_games/bin/activate
    source /home/grlaer/Desktop/mensam_games/vars.env
    
    cd /home/grlaer/Desktop/mensam_games/cards_refactor
    
    #python3 manage.py shell < tcg_sku/test_bash.py
    ./manage.py shell < tcg_sku/test_bash.py
    
    #cat tcg_sku/test_bash.py | ./manage.py shell
    
    exit 0

Python Script

    from datetime import datetime
    
    print(datetime.now())
    
    def do_this():
        print("Its printing datetime")
        print(datetime.now())
        return None
    
    do_this()

Ошибка/Откат

    2022-01-16 00:11:02.698550
    Its printing datetime
    Traceback (most recent call last):
      File "./manage.py", line 22, in <module>
        main()
      File "./manage.py", line 18, in main
        execute_from_command_line(sys.argv)
      File "/home/grlaer/Desktop/mensam_games/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
        utility.execute()
      File "/home/grlaer/Desktop/mensam_games/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/home/grlaer/Desktop/mensam_games/lib/python3.8/site-packages/django/core/management/base.py", line 330, in run_from_argv
        self.execute(*args, **cmd_options)
      File "/home/grlaer/Desktop/mensam_games/lib/python3.8/site-packages/django/core/management/base.py", line 371, in execute
        output = self.handle(*args, **options)
      File "/home/grlaer/Desktop/mensam_games/lib/python3.8/site-packages/django/core/management/commands/shell.py", line 93, in handle
        exec(sys.stdin.read())
    
    File "<string>", line 12, in <module>
    File "<string>", line 9, in do_this
    NameError: name 'datetime' is not defined

Я запускаю bash test_bash.sh из командной строки и получаю вышеуказанную ошибку; Однако если я сделаю datetime глобальной переменной ИЛИ если я сделаю datetime параметром функции, то все будет работать как надо. Аналогично, если я подстрою сценарий bash так, чтобы вместо попытки запустить файл python из оболочки django, он запускался просто с python, то все работает как надо.

У меня также была такая проблема, что ember python django shell в bash script shell.

Решение действительно, как указано в вопросе, состоит в том, чтобы сделать

globals().update(locals())
Вернуться на верх