Django [Errno 2] Нет такого файла или каталога при записи файла журнала - PullRequest
0 голосов
/ 08 мая 2019

У меня есть функция просмотра django для выгрузки базы данных mysql на удаленный сервер Ubuntu и сохранения команд в файле журнала.Но во время работы он постоянно говорит мне, что с файлами что-то не так.Здесь я представляю некоторый код, и кто-то может мне помочь?

Django 2.1.7, python3.6, Ubuntu16.04LTS

class Step1aView(IndexView):
    def MySQLDumpBackup(self, dbhost, dbuser, dbpwd, dbname):
        # backup mysql database to sql file
        backupDir = r"/opt/workspace"
        dbCharset = 'utf8'
        backupDate = time.strftime(r"%Y-%m-%d_%H:%M:%S")
        dumppath = r"/usr/bin/mysqldump"
        # position of mysqldump on the server
        # commands to execute
        self.command = dumppath + " -h %s -u %s -p%s %s --default_character-set=%s > %s/%s_%s.sql" %(dbhost,dbuser,dbpwd,dbname,dbCharset,backupDir,backupDate,dbname)

        # if the log file does not exists, create it as DjangoDbLog.txt
        logName = backupDir + '/DjangoDbLog.txt'
        # logName = 'DjangoDbLog.txt'
        if os.path.exists(logName) == False:
            logFile = open(logName, 'w')
            logFile.close()
        else:
            pass

        logFile = open(logName, 'a')
        logFile.write('\n' + self.command + 'Time:' + backupDate)
        logFile.close()

        # execute the command
        os.system(self.command)
        filenames = backupDate+'_'+dbname+'.sql'
        return filenames

    def post(self, request):
        if request.method == 'POST':

            dbhost = request.POST.get('Ori_ip')
            dbport = int(request.POST.get('Ori_port'))
            dbname = request.POST.get('Ori_db')
            dbuser = request.POST.get('Ori_name')
            dbpwd = request.POST.get('Ori_passwd')
            dbchar = request.POST.get('Ori_char')

            dbhost = str(dbhost)
            dbname = str(dbname)
            dbuser = str(dbuser)
            dbpwd = str(dbpwd)
            dbchar = str(dbchar)

            try:
                filenames=self.MySQLDumpBackup(dbhost, dbuser, dbpwd, dbname)
            except Exception as error:
                errStr = str(error)
                return render(request, 'add_struc/index.html', {"message_zone":"Error message" + errStr})
            return render(request, 'add_struc/index.html', {"message_zone":"Backup successful, "+filenames})

1 Ответ

0 голосов
/ 08 мая 2019

Назначение backupDir = r "/ opt / workspace" неверно, я думаю.Вы инициализируете его как имя файла, но оно читается как строка.Здесь r обозначает его как относительный путь, но он не будет читать его таким образом, поскольку вы не упоминаете его как путь к файлу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...