je cherche simplement à comparer deux variables pour vérifier qu'un login existe sur le système ou pas.
j'ai pensé que ceci fonctionnait:
login=form1.lineEdit1_1.text()
opfil=open('/etc/passwd','r')
lines = opfil.readlines()
for i in lines:
valdon=i.split(':')[0]
print str(valdon),str(login)
if str(login) == str(valdon):
print "Cet identifiant existe !"
opfil.close()
Mais, si les retours des prints sont corrects, quel que soit le login fourni, il ne m'est jamais dit qu'il existe (alors que je sais parfaitement que oui).
Pourtant, la comparaison a l'air correcte... Où est l'erreur ?
# Chez moi ça marche...
Posté par Amand Tihon (site web personnel) . Évalué à 2.
#! /usr/bin/python import sys login=sys.argv[1] opfil=open('/etc/passwd','r') lines = opfil.readlines() for i in lines: valdon=i.split(':')[0] if str(login) == str(valdon): print "Cet identifiant existe !" opfil.close()Résultat : Après, tu peux faire la boucle plus propre :for i in file('/etc/passwd','r'): valdon=i.split(':')[0] if str(login) == valdon: print "Cet identifiant existe !"Plus besoin de close() parce que le fichier sera fermé automatiquement. Pas nécessaire de forcer 'valdon' en str(), c'est déjà une string (je l'ai laissé pour 'login', vu que je ne sais pas ce que form1.lineEdit1_1.text() te renvoie).[^] # Re: Chez moi ça marche...
Posté par rangzen (site web personnel) . Évalué à 2.
for i in file('/etc/passwd','r'): if str(login) == i.split(':')[0]: print "Cet identifiant existe !" breakNan ? Après on part dans les map, oneliner et autres joyeusetés mais là ça reste clair et on évite des se taper tout le fichier pour root par exemple.[^] # Re: Chez moi ça marche...
Posté par mberro . Évalué à 1.
Avec ton code, ça fonctionne, avec le mien, non.
Une subtilité avec readlines?
En tout cas merci, j'ai appris une autre façon de faire que mon usine à gaz.
[^] # Re: Chez moi ça marche...pas
Posté par mberro . Évalué à 1.
#!/usr/bin/env python # -*- coding: iso-8859-15 -*- for i in file('/etc/passwd','r'): login=i.split(':')[0] # on récupère le login shellus=i.split(':')[6] # on récupère le shell complet utilisateur shellus2=str(shellus.split('/')[2]) # on récupère le shell utilisateur if shellus2 == 'bash' : shellact="bash" else: shellact="autre" print login,shellus2,shellactJe n'arrive pas à comprendre pourquoi ma comparaison est toujours fausse. Quand je fais un print de shellus2, jai bien "bash" qui s'affiche, mais quand je le compare à "bash", c'est toujours le else qui passe. J'ai essayé en mettant str(shellus2), mais pas moyen... Ca me stresse, parce qu'en bash ça me prendrait une poignée de secondes pour que ça fonctionne... Une idée?[^] # Re: Chez moi ça marche...pas
Posté par mberro . Évalué à 1.
si je fait un print "*********"+shellus2+"*******" je m'apperçois qu'il me prend le saut de ligne dans la variable shellus2.
Ce qui est somme toute logique avec le split.
Comment puis je m'en débarasser, ou ne prendre que le texte sans le saut de ligne ?
[^] # Re: Chez moi ça marche...pas
Posté par rangzen (site web personnel) . Évalué à 1.
[^] # Re: maintenant, si!
Posté par mberro . Évalué à 1.
#!/usr/bin/env python # -*- coding: iso-8859-15 -*- for i in file('/etc/passwd','r'): login=i.split(':')[0] # on récupère le login shellus=i.split(':')[6] # on récupère le shell complet utilisateur shellus2=str(shellus.split('/')[2]) # on récupère le shell utilisateur shellus2=.shellus2.strip('\n') if shellus2 == 'bash' : shellact="bash" else: shellact="autre" print login,shellus2,shellactSuivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.