Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1509 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Codage entre Python 3.2 et MacOs X.6.7. [Résolut]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Codage entre Python 3.2 et MacOs X.6.7. [Résolut]

n°2078080
Bidouil06
Posté le 25-05-2011 à 13:39:20  profilanswer
 

Bonjour,  
J'ai écrit une boucle récursive pour récupérer les informations Unix d'éléments des répertoires à l'aide du module subprocess.check_output(). Ce qui me permet de récupérer les lignes à traiter.  
La commande qui me pose un problème est :

subprocess.check_output(["ls", lsOption, rep]).decode("Utf-8" ).split('\n'))


Ça fonctionne très bien en ligne de commande. Mais quand le script est lancé de manière automatique par le biais de launchd, j'obtient :  

subprocess.CalledProcessError: Command '['ls', '-TaeblO@', '/Re\314\247pertoireAvecDesAccents/']' returned non-zero exit status 1


Je précise que quand les répertoires n'ont pas d'accent, ça fonctionne. Je pensais à une erreur de codage, mais après de multiple tests (macroman, Utf-8, ascii…), j'ai toujours cette erreur avec un lancement automatique...  
Y compris en faisant rep.encode("macroman" ) par exemple.  
 
Une solution, explication, un lien d'information...
 
Python version : 3.2 (r32:88452, Feb 20 2011, 10:19:59)  
[GCC 4.0.1 (Apple Inc. build 5493)]  
supports_unicode_filenames = True


Message édité par Bidouil06 le 22-06-2011 à 15:22:14
mood
Publicité
Posté le 25-05-2011 à 13:39:20  profilanswer
 

n°2078522
masklinn
í dag viðrar vel til loftárása
Posté le 26-05-2011 à 17:01:22  profilanswer
 

Je verrais 2 possibilités:
 
1. Essaies de passer par le shell, voir si il a le bon encodage (encode en utf-8 et passe shell=true à subprocess.check_output)
 
2. Si ça tape directement dans HFS+ sans transcodage, l'encodage des noms est en UTF-16, pas en UTF-8. Essaies d'encoder ton nom de fichier en UTF-16
 
Autres idées:  

  • récupère le stderr de ls, histoire de savoir quel est son message d'erreur (pour avoir un truc un peu plus utile que just status 1), tu peux rediriger avec stderr= comme dans Popen (genre stderr=subprocess.STDOUT)
  • utilise les modules de la stdlib pour récupérer les infos dont tu as besoin, plutôt que ls


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2078702
Bidouil06
Posté le 27-05-2011 à 15:08:29  profilanswer
 

Merci pour ta réponse Masklinn.
 
En fait j'utilise 'ls' pour récupérer les informations des éléments : les ACLs, les autorisations (user, group), la date (de modification), le nom (réel, avec espace etc), le type (lien, etc), le poids etc. Sur une ligne, que je trie après.
Çà en une seule passe. Je n'ai pas trouver comment récupérer de telles infos dans les modules, d'ou 'ls'.
 
Quand je tappe :
from os.path import supports_unicode_filenames
print(supports_unicode_filenames)
J'obtiens :
US-ASCII  ???
Mais j'essaie avec Utf-16, je suis passé à côté…
 
Pas trouvé stdlib ??? os, io, sys ?

n°2078708
masklinn
í dag viðrar vel til loftárása
Posté le 27-05-2011 à 15:19:56  profilanswer
 

Bidouil06 a écrit :

Merci pour ta réponse Masklinn.
 
En fait j'utilise 'ls' pour récupérer les informations des éléments : les ACLs, les autorisations (user, group), la date (de modification), le nom (réel, avec espace etc), le type (lien, etc), le poids etc. Sur une ligne, que je trie après.
Çà en une seule passe. Je n'ai pas trouver comment récupérer de telles infos dans les modules, d'ou 'ls'.
 
Quand je tappe :
from os.path import supports_unicode_filenames
print(supports_unicode_filenames)


Aucun rapport, ça c'est à propos de l'utilisation de noms de fichiers unicode (type str en Python 3) quand tu appelles une commande.

Bidouil06 a écrit :

Mais j'essaie avec Utf-16, je suis passé à côté…


Après avoir testé, ça semble être de l'UTF-8 décomposé en fait.

Bidouil06 a écrit :

Pas trouvé stdlib ??? os, io, sys ?


os.stat avec stat.* je dirais.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2082974
Bidouil06
Posté le 17-06-2011 à 16:34:43  profilanswer
 

Voilà une fonction pour remédier au blèm...
Pour les principaux caractères.
 

def codeT(texte):
 '''\nAdapte le codage des caractères Apple.
 codeT(texte)
 '''
 
 # Tables.
 cars={'e\\314\\200': 'è', \
 'e\\314\\201': 'é', \
 'e\\314\\202': 'ê', \
 'e\\314\\210': 'ë', \
 'E\\314\\200': 'È', \
 'E\\314\\201': 'É', \
 'E\\314\\202': 'Ê', \
 'E\\314\\210': 'Ë', \
 'a\\314\\200': 'à', \
 'a\\314\\201': 'á', \
 'a\\314\\202': 'â', \
 'a\\314\\210': 'ä', \
 'A\\314\\200': 'À', \
 'A\\314\\201': 'Á', \
 'A\\314\\202': 'Â', \
 'A\\314\\210': 'Ä', \
 'o\\314\\200': 'ò', \
 'o\\314\\201': 'ó', \
 'o\\314\\202': 'ô', \
 'o\\314\\210': 'ö', \
 'O\\314\\200': 'Ò', \
 'A\\314\\201': 'Ó', \
 'O\\314\\202': 'Ô', \
 'O\\314\\210': 'Ö', \
 'c\\314\\247': 'ç', \
 'C\\314\\247': 'Ç', \
 '\\302\\230': 'Ø', \
 '\\302\\240': '»', \
 '\\302\\241': '¡', \
 '\\302\\242': '¢', \
 '\\302\\245': '¥', \
 '\\302\\247': '§', \
 '\\302\\250': '¨', \
 '\\302\\251': '©', \
 '\\302\\252': 'ª', \
 '\\302\\253': '«', \
 '\\302\\254': '¬', \
 '\\302\\256': '®', \
 '\\302\\260': '°', \
 '\\302\\261': '±', \
 '\\302\\264': '´', \
 '\\302\\265': 'µ', \
 '\\302\\266': '¶', \
 '\\302\\267': '·', \
 '\\302\\272': 'º', \
 '\\302\\273': '»', \
 '\\302\\277': '¿', \
 '\\303\\230': '∆', \
 '\\303\\237': 'ß', \
 '\\303\\246': 'æ', \
 '\\303\\270': 'ø', \
 '\\304\\261': 'ı', \
 '\\305\\223': 'œ', \
 '\\306\\222': 'ƒ', \
 '\\316\\251': 'Ω', \
 '\\317\\200': 'π', \
 '\\342\\200\\224': '—', \
 '\\342\\200\\230': '‘', \
 '\\342\\200\\231': '’', \
 '\\342\\200\\234': '“', \
 '\\342\\200\\235': '”', \
 '\\342\\200\\236': '„', \
 '\\342\\200\\240': '†', \
 '\\342\\200\\241': '‡', \
 '\\342\\200\\242': '•', \
 '\\342\\200\\246': '…', \
 '\\342\\200\\260': '‰', \
 '\\342\\200\\271': '‹', \
 '\\342\\201\\204': '⁄', \
 '\\342\\202\\254': '€', \
 '\\342\\204\\242': '™', \
 '\\342\\210\\202': '∂', \
 '\\342\\210\\206': 'Ø', \
 '\\342\\210\\217': '∏', \
 '\\342\\210\\221': '∑', \
 '\\342\\210\\232': '√', \
 '\\342\\210\\236': '∞', \
 '\\342\\210\\253': '∫', \
 '\\342\\211\\210': '≈', \
 '\\342\\211\\240': '≠', \
 '\\342\\211\\244': '≤', \
 '\\342\\211\\245': '≥', \
 '\\342\\227\\212': '◊', \
 '\\r': "\x0d"}
 
 # Lecture de la table.
 for i in cars.keys():
  texte=texte.replace(i, cars[i])
 
 return texte


 
A fignoler, j'attend vos suggestions...


Message édité par Bidouil06 le 23-07-2011 à 19:37:57
n°2082981
masklinn
í dag viðrar vel til loftárása
Posté le 17-06-2011 à 16:51:59  profilanswer
 

'tin tu portes bien ton pseudo toi [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Codage entre Python 3.2 et MacOs X.6.7. [Résolut]

 

Sujets relatifs
oups souci avec "end=' '" sous PythonMorpion 3D en python
python & Mac OS X : problème pour lancer un module [résolu][RESOLU] Conseil dois-je utiliser Python
Mes questions sur Pythonpython 3.2 / nouveau module logging / config dic JSON [résolu]
[Script Batch] Trouver tous les fichiers dont la taille est sup à "X"Identifier un phénomène de répétition inconnu dans une liste de X nomb
[PYTHON] Module C++ pour python 
Plus de sujets relatifs à : Codage entre Python 3.2 et MacOs X.6.7. [Résolut]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR