我正在尝试从我的视图中运行自定义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:我也尝试使用OS级别命令,如下所示:
from subprocess import call
call(["python", "manage.py", "send_all_queued_mails"])
但是我遇到了与上面相同的错误。
答案 0 :(得分: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
这不是确切的解决方案,因为它不能解决运行该命令时特权提升的问题。但是,如果遇到类似的错误,则可以直接将要为其创建符号链接的文件分配给所需的文件。
如果有人知道更好的方法,请回答。