Как запустить пользовательские команды управления django с повышенными привилегиями? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь запустить пользовательскую команду управления django из моих представлений.У меня есть готовое представление для выполнения команды, как показано ниже:

from django.core.management import call_command
import django

def send_queued_mails():
    # Run Django Setup
    django.setup()
    call_command('send_all_queued_mails')

Но, когда команда выполняется на моем компьютере с Windows, я получаю следующую ошибку:

    os.symlink(self.pid_filename, self.lock_filename)
    OSError: symbolic link privilege not held

IЯ могу справиться с этим вручную, запустив терминал от имени администратора, но я хочу выполнить команду через мои представления и с повышенными привилегиями.

Любые идеи или предложения приветствуются.

PS: Я также пытался использоватьКоманда уровня ОС, как показано ниже:

from subprocess import call
call(["python", "manage.py", "send_all_queued_mails"])

Но я получаю ту же ошибку, что и выше.

1 Ответ

0 голосов
/ 15 ноября 2018

Я нашел решение, которое хорошо работает для меня и может работать для других.Я использую django-post_office для отправки электронных писем.Я проследил до строки, где возникла ошибка, это было следующим образом:

    if hasattr(os, 'symlink'):
        os.symlink(self.pid_filename, self.lock_filename)
    else:
        # Windows platforms doesn't support symlinks, at least not through the os API
        self.lock_filename = self.pid_filename

В комментариях четко указывалось, что Windows не поддерживает символическую ссылку, поэтому я немного изменил код, чтобы избежать ошибки.

        if hasattr(os, 'symlink') and platform.system() != 'Windows':
        os.symlink(self.pid_filename, self.lock_filename)
    else:
        # Windows platforms doesn't support symlinks, at least not through the os API
        self.lock_filename = self.pid_filename

Это не точное решение, поскольку оно не решает проблему повышения привилегий при выполнении этой команды.Но если вы сталкиваетесь с подобной ошибкой, вы можете напрямую назначить файл, для которого вы хотите создать символическую ссылку, нужному файлу.

Если кто-нибудь знает лучший способ, пожалуйста, ответьте.

...