web-dev-qa-db-fra.com

Erreur de duplicité liée à python?

Donc, j'ai cette erreur qui est apparemment un problème connu. Je cherche un moyen de contourner le problème jusqu'à ce que ce soit résolu car je ne peux pas me permettre de me passer de la sauvegarde des systèmes.

Traceback (most recent call last):
  File "/usr/bin/duplicity", line 1532, in <module>
    with_tempdir(main)
  File "/usr/bin/duplicity", line 1526, in with_tempdir
    fn()
  File "/usr/bin/duplicity", line 1380, in main
    do_backup(action)
  File "/usr/bin/duplicity", line 1401, in do_backup
    sync_archive(decrypt)
  File "/usr/bin/duplicity", line 1139, in sync_archive
    remote_metafiles, ignored, rem_needpass = get_metafiles(remlist)
  File "/usr/bin/duplicity", line 1029, in get_metafiles
    pr = file_naming.parse(fn)
  File "/usr/lib/python2.7/dist-packages/duplicity/file_naming.py", line 400, in parse
    pr = check_inc()
  File "/usr/lib/python2.7/dist-packages/duplicity/file_naming.py", line 340, in check_inc
    t1 = str2time((m1 or m2).group("start_time"), short)
  File "/usr/lib/python2.7/dist-packages/duplicity/file_naming.py", line 290, in str2time
    t = dup_time.genstrtotime(timestr.upper())
  File "/usr/lib/python2.7/dist-packages/duplicity/dup_time.py", line 295, in genstrtotime
    return override_curtime - intstringtoseconds(timestr)
  File "/usr/lib/python2.7/dist-packages/duplicity/dup_time.py", line 203, in intstringtoseconds
    error()
  File "/usr/lib/python2.7/dist-packages/duplicity/dup_time.py", line 194, in error
    raise TimeException(bad_interval_string % interval_string)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)

Problèmes liés:

2
user447607

Le problème principal est les chaînes Unicode - vous les avez quelque part, et Duplicity (ou du moins la version que vous utilisez éventuellement) n'est pas configuré pour gérer correctement les chaînes Unicode. Cela est dû aux avertissements de Python 2.


Dans Python 2, il existe deux classes de type "chaîne" distinctes:

  • str - Il s'agit du codec standard ASCII standard utilisé dans de nombreux systèmes. Il s'agit plus ou moins de la norme A-Z, 0-9, de certains symboles du jeu de caractères du clavier.

  • unicode - Il s'agit du codage UTF-8, UTF-16, etc., qui ont une gamme énorme de caractères internationaux, emojis, etc.

Quel que soit ce qui est passé à Duplicity, dans ce cas, nous utilisons probablement un caractère des jeux de caractères UTF qui est en dehors de la plage standard de caractères ASCII. C'est pourquoi nous obtenons un UnicodeDecodeError dans le suivi - nous essayons de convertir les chaînes Unicode en chaînes ASCII, et nous ne pouvons pas en raison de caractères extérieurs au ASCII. _ jeux de caractères.


Je suggérerais de signaler un bogue dans Duplicity pour indiquer qu'ils ne gèrent pas correctement Unicode, mais je regarderais également quels fichiers sont gérés par Duplicity et assurez-vous de ne pas avoir de caractères Unicode (ou de caractères de contrôle secrets cachés) dans les chaînes avec lesquelles il essaie de travailler.

NOTE: Selon les bugs liés, ceci est déjà corrigé. il est possible que cela ait été corrigé dans version ultérieure de Deja-Dup, mais pas dans la version que vous utilisez, auquel cas vous auriez besoin de trouver une version Backported ou Updated pour contourner l'erreur.

Sur l'un des bogues, une solution de contournement consistant à renommer des noms de fichiers avec des jeux de caractères étrangers dans le jeu Unicode doit être renommée en noms de fichiers uniquement ASCII, afin que DejaDup puisse les gérer correctement. C'est la seule solution de contournement connue, à moins de mettre à jour une version plus récente de DejaDup.

4
Thomas Ward

Assurez-vous d'utiliser la dernière version 0.7.12, car certaines améliorations ont été apportées à cet égard.

On dirait que la duplicité essaie de générer une TimeException, mais trébuche sur l'impression de la traduction d'erreur.

La solution de contournement actuelle devrait être de définir LC_ALL env var pour interdire la traduction en duplicité et l'utilisation des chaînes anglaises par défaut. Exportez le paramètre ou mettez-le devant votre appel de duplicité, comme

LC_ALL=C duplicity ...

Bien sûr, cela ne résoudra pas l'erreur, mais montrera au moins en quoi l'erreur (TimeException) est provoquée.

..ede/duply.net

0
ede