Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Port code Py3 vers Py2] str et Buffer interface

Anonyme
    8 février 2013 à 18:25:54

    Bonjour tout le monde,

    J'ai trouvé un site assez sympa, ascii;io, un système pour partager des "vidéos" de terminal. Le code du client est écrit pour Python2, et je voudrais le porter pour Python3.

    J'ai pas mal avancé, mais une erreur subsiste. C'est le classique " 'str' does not support the buffer interface ".

    Voici le traceback :  https://gist.github.com/MatthR3D/bd895c7dfd7e55da8e78

    Et le code : https://github.com/MatthR3D/ascii.io-cli-py3/blob/master/bin/asciiio ( ligne 282 c'est le bug)

    Merci d'avance pour vos solutions,

    MatthR3D 

    -
    Edité par Anonyme 8 février 2013 à 18:27:15

    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2013 à 19:42:36

      Avec Python3 les str sont de l'unicode, pour les écrire dans un fichier ou ailleurs, il faut les encoder (avec le bon encoding).
      Exemple:
         def _write_stdout(self, data):
              '''Writes to stdout as if the child process had written the data.'''
      
              os.write(pty.STDOUT_FILENO, data.encode('utf-8'))
      • Partager sur Facebook
      • Partager sur Twitter
        9 février 2013 à 14:08:24

        Ça ne marche pas simplement en utilisant 2to3 ?

        • Partager sur Facebook
        • Partager sur Twitter
        Zeste de Savoir, le site qui en a dans le citron !
        Anonyme
          10 février 2013 à 19:27:37

          Déjà, merci pour vos conseils.

          J'ai passé 2to3 comme me l'a demandé nohar :

          2to3 -w asciiio

          J'ai ensuite rajouté la modif' de mps, et le traceback deveitn atroce, comme vous pouvez le voir :

          Traceback (most recent call last):
                                              File "./asciiio", line 480, in <module>
                                                                                         main()
                                                                                                 File "./asciiio", line 468, in main
                                if not AsciiCast(api_url, user_token, command, title, record_input, always_yes).create():
                   File "./asciiio", line 43, in create
                                                           self._record()
                                                                           File "./asciiio", line 61, in _record
                                                                                                                    PtyRecorder(self.path, command, self.record_input).run()
                                                                      File "./asciiio", line 165, in run
                                                                                                            success = self._spawn()
                             File "./asciiio", line 209, in _spawn
                                                                      self._copy()
                                                                                    File "./asciiio", line 260, in _copy
                    self._handle_master_read(data)
                                                    File "./asciiio", line 269, in _handle_master_read
                                                                                                          self._write_stdout(data)
                            File "./asciiio", line 282, in _write_stdout
                                                                            os.write(pty.STDOUT_FILENO, data.encode('utf-8'))
                     AttributeError: 'bytes' object has no attribute 'encode'

          Vous en pensez quoi ? Faut-il tester le type de l'objet data afin d'exécuter avec l'encodage si c'est un string ?

          Et surtout, qu'est-ce qui fait déconner mon shell ? (Testé sous Zsh et Bash, résultats identiques)

          Merci d'avance




          • Partager sur Facebook
          • Partager sur Twitter

          [Port code Py3 vers Py2] str et Buffer interface

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown