2011-07-02 2 views
-2

У меня есть следующий код, и я хочу знать, как можно подавить ошибку, я пробовал поиск в Google, но без sucess.python: FTP с TarFile

def backup_system(dirs): 
    """ Funcao para fazer backup das confs do systema """ 
    os.walk("/") 
    try: 
     tar = tarfile.open("/home/backup/system/system_backup_%s.tgz" % today, "w:gz") 
     for dir in system_dirs: 
      tar.add(dir,recursive=True) 
    finally: 
     tar.close() 
    print tar 
    ftp_put(tar) 


def ftp_put(file): 
    """Funcao para fazer upload dos arquivos para FTP""" 
    conn = ftplib.FTP(ftp_server, backup_user, backup_password) 
    f = open(file, 'r') 
    conn.storbinary("STOR ", f) 
    try: 
     f = open(file, 'r') 
     conn.storbinary("STOR ", f) 
     f.close() 
    finally: 
     conn.quit() 

Ну, это нормально, за исключением того факта, что этот код возвращает ошибку с ftplib. Он говорит, что ожидать str, но нашел tarfile. Большое спасибо.

Правильно, здесь ошибка:

Traceback (most recent call last): 
    File "/usr/local/bin/backup.py", line 89, in <module> 
    main() 
    File "/usr/local/bin/backup.py", line 78, in main 
    backup_system(system_dirs) 
    File "/usr/local/bin/backup.py", line 42, in backup_system 
    ftp_put(tar) 
    File "/usr/local/bin/backup.py", line 55, in ftp_put 
    f = open(file, 'rb') 
TypeError: coercing to Unicode: need string or buffer, TarFile found 
+0

Можете ли вы опубликовать трассировку стека? Вы даже не указали, в какой строке произошла ошибка. Я предполагаю, что это строка 11. –

+0

@ DontCare4Free да я могу, я отредактирую вопрос с ошибкой. Спасибо за ответ ! –

+0

Упс, я имел в виду строку 17 –

ответ

1

Чтобы увеличить ответ Игнасио, я немного обновил вашу резервную систему, надеюсь, это должно сделать трюк.

def backup_system(dirs): 
    """ Funcao para fazer backup das confs do systema """ 
    os.walk("/") 
    tar_name = "/home/backup/system/system_backup_%s.tgz" % today 
    try: 
     tar = tarfile.open(tar_name, "w:gz") 
     for dir in system_dirs: 
      tar.add(dir,recursive=True) 
    finally: 
     tar.close() 
    print tar 
    ftp_put(tar_name) 
+0

Большое спасибо за ваш ответ, но ошибка продолжается! –

+0

Кажется, что f = open (файл, «rb») не принимают TARFILE в качестве входных данных –

+0

@ Simão, как было сказано несколько раз, не передает сам tar-файл ftp_put. Вместо этого передайте имя файла tar.gz, который вы хотите отправить. –

4

tar является tarfile.TarFile, но open() ожидает строка для использования в качестве имени файла.

+0

Был готов опубликовать это. –

+0

Да, он работает с файлом .tgz вправо, но когда я пытаюсь загрузить на ftp ... ошибка возникает –

+0

@ ignacio-vazquez-abrams хорошо, я ставлю stacktrace. Итак, каков правильный способ сделать это с открытым? Преобразовать его прямо перед вызовом функции ftp? –

Смежные вопросы