下午好,我在Django 1.10中有一个应用程序,我需要创建bd的备份,当用户点击将放置在模板中的按钮并将其下载到该模板中时,应该创建此副本。用户团队。
在我的views.py中,我有以下内容。
def backup(request):
subprocess.Popen("mysqldump -u root -p12345 victimas > /home/proyecto/backup.sql")
subprocess.Popen("gzip -c /home/proyecto/backup.sql > /home/proyecto/backup.gz")
dataf = open('/home/proyecto/backups/backup.gz', 'r')
return HttpResponse(dataf.read(), mimetype='application/x-gzip')
但是我收到了错误
[Errno 2] No such file or directory: django mysqldump
直接从控制台执行此操作会为我创建文件,并检查文件夹的权限。 我感谢您的合作
答案 0 :(得分:0)
根据Popen文档,Popen
获取参数列表。如果传递一个字符串,它将被视为命令名称 - 整个字符串将被视为命令,而不是带参数的命令。
使用以下方法拆分字符串参数:
import shlex command_line = "mysqldump -u root -p12345 victimas > /home/proyecto/backup.sql" args = shlex.split(command_line) subprocess.Popen(args)
答案 1 :(得分:0)
我解决了这个问题:
在Django设置文件中添加:
RUTA = '/path/to_tmp/file/'
在views.py
中import subprocess, gzip
from subprocess import Popen
from victimas.settings import DATABASES, RUTA
def backup(request):
name = DATABASES['default']['NAME']
passwd = DATABASES['default']['PASSWORD']
user = DATABASES['default']['USER']
ruta = RUTA
proc = subprocess.Popen("mysqldump -u "+user+" -p"+passwd+" "+name+" > "+ruta+"backup.sql", shell=True)
proc.wait()
procs = subprocess.Popen("tar -czvf "+ruta+"backup.tar.tgz "+ruta+"backup.sql", shell=True, )
procs.wait()
fs = FileSystemStorage(ruta)
with fs.open('backup.tar.tgz') as tar:
response = HttpResponse(tar, content_type='application/x-gzip')
response['Content-Disposition'] = 'filename="backup.tar.tgz"'
return response