2017-09-14 1 views
0

j'ai cette fonction pour obtenir un type de fichier:cordes parage en python 3

def get_file_type(): 
try: 
    cmd = ['/usr/bin/file', '/home/user'] 
    p = Popen(cmd, stdout=PIPE).communicate()[0] 
    p = str(p).split(':')[1:] 
    if len(p) > 1: 
     ' : '.join(p).strip().replace('\\n', '') 
    else: 
     p = p[0].strip().replace('\\n', '') 
    print(p) 
except CalledProcessError: 
    print('unknown') 

Mais il retourne ceci: répertoire » L'apostrophe fin n'est pas une faute de frappe, il est ce qui me dérange. Et je ne comprends pas pourquoi (pas que cela me dérange ..;))

vous remercie

+1

Impossible de se reproduire. Quelle est la valeur de «p» avant la réaffectation? –

+1

Lorsque 'len (p)> 1', vous effectuez une jointure, déposez et remplacez * le résultat de *. Vous voulez probablement l'assigner à 'p'. – jasonharper

+0

@tobias_k p avant la réaffectation: ["répertoire \\ n '"] –

Répondre

3

Le problème est que vous traitez octets comme une chaîne et que vous utilisez python3. Alors, que vous obtenez lorsque vous appelez str(p) ressemble à ceci:

"b'/home/user: directory\\n'" 

Vous pouvez résoudre ce problème en faisant p.decode().split au lieu de str(p).split

+0

Belle prise ......! –

+0

Je suis en train d'effectuer une mise à niveau vers python3, je pensais que c'était la bonne façon de faire des octets en chaîne: je sais maintenant que ce n'est pas le cas. Merci ! –