0

我正在尝试从我的视图中运行自定义 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

我可以通过以管理员身份运行终端来手动解决这个问题,但我想通过我的视图和升级的权限运行命令。

任何想法或建议表示赞赏。

PS:我也尝试过使用操作系统级别的命令,如下所示:

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

但是我遇到了与上面相同的错误。

4

1 回答 1

0

我找到了一个对我很有效的解决方案,也可能对其他人有用。我正在使用 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

这不是确切的解决方案,因为它不能解决运行该命令时提升权限的问题。但是,如果您遇到类似的错误,您可以直接将要为其创建符号链接的文件分配给所需的文件。

如果有人知道更好的方法,请回答。

于 2018-11-15T06:38:29.823 回答