python:使用TarFile的FTP

-1 投票
2 回答
845 浏览
提问于 2025-04-16 20:41

我有以下代码,我想知道怎么能抑制这个错误,我在谷歌上搜索了一些,但没有成功。

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的时候会报错。错误信息是它期待的是字符串,但找到了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

2 个回答

4

tar 是一个 tarfile.TarFile 对象,但 open() 函数需要一个字符串作为文件名。

1

为了补充Ignacio的回答,我稍微更新了一下你的备份系统,希望这样能解决问题。

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)

撰写回答