2011-07-02 5 views
-2

私は次のコードを持っています。私はどのようにエラーを押さえることができるか知りたいです。私はいくつかのGoogle検索を試みましたが、成功しませんでした。Python:FTP with 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

Ignacioの回答を増やすために、私はあなたのbackup_systemを少し更新しました。うまくいけば、このトリックを行うべきです。

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

これはfar = open(file、 "rb")はTARFILEを入力 –

+0

@Simãoとして受け入れていないようですが、複数回述べたようにtarファイル自体をftp_putに渡さないでください。代わりに、送信するtar.gzファイルの名前を渡します。 –

4

tartarfile.TarFileですが、文字列はファイル名として使用するopen()期待しています。

+0

これを投稿しようとしていました。 –

+0

はい、ファイル.tgzを正しく作成していますが、ftpにアップロードしようとするとエラーが発生します。 –

+0

@ ignacio-vazquez-abramsまあ、私はスタックトレースを入れます。それで、オープンでこれを行う正しい方法は何ですか? ftp関数を呼び出す前にそれを変換しますか? –

関連する問題