我想要实现的目标:
我想创建一个python脚本,从CLI中停用数据库中的Django用户。我想到了这个:
$ sudo python manage.py shell
>>> user = User.objects.get(username=FooBar)
>>> user.is_active = False
>>> user.save()
>>> exit()
当我一个接一个地手动输入它时,上面的代码工作。但是,我希望将执行命令放在一个.py脚本中,如
$ sudo python script.py
现在我尝试了不同的方法:
os.system("command1 && command2 && command3")
subprocess.Popen("command1 && command2 && command3",
stdout=subprocess.PIPE, shell=True)
问题:
这不管用!我认为这里存在这个问题,因为Python一直等到打开的Django shell(第一个命令)完成,而这从来都不是。它不会执行脚本中的其余命令,因为第一个命令将其置于保留状态。
subprocess.popen
可以在shell中执行命令,但只能在Python shell中执行,我想使用Django shell。
有人知道如何使用.py脚本访问Django shell以执行自定义代码吗?
如果要执行访问Django模型的Python脚本,首先需要设置一个环境变量:
其中需要用项目目录替换
<path>
,即包含文件settings.py
的目录。然后可以导入模型文件,例如:
首先,不应该使用
sudo
访问Python shell。不需要以根用户身份运行。其次,创建从命令提示符运行的脚本的方法是编写一个自定义manage.py脚本,这样就可以运行
./manage.py deactivate_users
。完整的操作说明见the documentation。尝试将命令作为here文档输入正在运行的django shell:
相关问题 更多 >
编程相关推荐