PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : komplette Ausgabe einer Liste



newc0mer
02-08-2010, 16:18
Hallo

ich habe in python eine list, inhalt zb.:

[u'5 :Current local users 3503, max 3865', u':hubbard.freenode.net 266 newc0mer 59352 64360 :Current global users 59352, max 64360', u':hubbard.freenode.net 250 newc0mer :Highest connection count: 3866 (3865 clients) (1137078 connections received)', u':hubbard.freenode.net 375 newc0mer :- hubbard.freenode.net Message of the Day -', u':hubbard.freenode.net 372 newc0mer :- Massive thanks to Carnegie Mellon University (http://www.cmu.edu) and', u':hubbard.freenode.net 372 newc0mer :- the CMU Computer Club for sponsoring this server!', u':hubbard.freenode.net 372 newc0mer :-', u':hubbard.freenode.net 372 newc0mer :- Hubbard, Lafayette Ronald [1911 - 1986]. Was an american Sci-Fi writer,', u':hubbard.freenode.net 372 newc0mer :- perhaps more famed for devising Dianetics and Scientology.', u":hubbard.freenode.net 372 newc0mer :- You're using freenode, a service of Peer-Directed Projects", u':hubbard.freenode.net 372 newc0mer :- Center Ltd (http://freenode.net/pdpc.shtml).', u':hubbard.freenode.net 372 newc0mer :-', u":hubbard.freenode.net 372 newc0mer :- On the subject of fundraisers, we'd like to thank our donors,", u':hubbard.freenode.net 372 newc0mer :- hardware and bandwith sponsors and especially The Gallery', u':hubbard.freenode.net 372 newc0mer :- Project (http://gallery.menalto.com/) and our corporate sponsor', u':hubbard.freenode.net 372 newc0mer :- Canonical Ltd (http://www.canonical.com) for the generous']


ich gebe diese liste wiefolgt aus:

for line in self.buffer:
print line

dies funktioniert in der regel auch korrekt.

doch ist der letzte eintrag in der liste der folgende:

... u':NickServ!NickServ@services. NOTICE newc0mer :This nickname is registered. Please choose a different nickname, or identify via \x02/msg NickServ identify <password>\x02.']
... dann wird dieser Eintrag der list nicht ausgegeben, als wuerde er nicht durchiteriert. ich habe keine ahnung wieso. wenn ich auf die list ein len() mache, gibt es mir die korrekt laenge aus. und wenn ich direkt auf das element zugreiffe:

print self.buffer(len(self.buffer)-1)
.. dann klappt dies auch. und der gewuenschte eintrag wird ausgegeben.

ich werde daraus nicht schlau. es ist ein unicode string... ich sehe kein problem.

vielen dank fuer jegliche hilfe!

gruss
newc0mer

John W
02-08-2010, 20:51
Das liegt glaub ich nicht an Python...
Hast du dir die Meldung mal durchgelesen?
Dein IRC-Bot (ich schätze mal es ist einer; die Logs sprechen dafür) versucht sich als newc0mer am Server anzumelden - wenn du aber ebenfalls drin bist, klappt das nicht, weil du ja schon als newc0mer angemeldet bist.

Ersetz mal newc0mer in deinem Skript durch was anderes (z.B. newc0merBot) - dann wird das laufen.

Du kannst natürlich auch einfach mal folgendes machen, um zu sehen, ob dein Python-Interpreter nicht ein paar Bits über den Durst getrunken hat :D:

i=len(self.buffer)
for line in self.buffer:
i-=1
print "Alles OK" if i==0 else "Hicks..."

newc0mer
03-08-2010, 21:22
hallo John_W

es geht in dem Script eben darum, dass ich diese NickServ Msg abfangen kann. der bot hat scho nen mechanismus, um autom. den namen zu wechseln.
ich bin nur recht verdutzt, weil ich genau diese NickServ msg nicht parsen kann... wieso auch immer..

[u'y.freenode.net 372 newc0mer :-', u':zelazny.freenode.net 372 newc0mer :- By registering your nickname with Nickserv you agree that you', u':zelazny.freenode.net 372 newc0mer :- are 13 years of age, or older. For more information about the', u":zelazny.freenode.net 372 newc0mer :- Children's Online Privacy Protection Act please see their", u':zelazny.freenode.net 372 newc0mer :- website at (http://www.coppa.org).', u':zelazny.freenode.net 372 newc0mer :-', u':zelazny.freenode.net 372 newc0mer :- freenode runs an open proxy scanner. Your use of the network', u':zelazny.freenode.net 372 newc0mer :- indicates your acceptance of this policy. For details on', u':zelazny.freenode.net 372 newc0mer :- freenode network policy, please take a look at our policy', u':zelazny.freenode.net 372 newc0mer :- page (http://freenode.net/policy.shtml). Thank you for using', u':zelazny.freenode.net 372 newc0mer :- the network!', u':zelazny.freenode.net 372 newc0mer :-', u":zelazny.freenode.net 372 newc0mer :- Don't forget to check out these other Peer-Directed Projects:", u':zelazny.freenode.net 372 newc0mer :- FOSSCON [http://www.fosscon.org] and fossevents', u":zelazny.freenode.net 372 newc0mer :- [http://www.fossevents.org], and soon we'll repeat last years", u':zelazny.freenode.net 372 newc0mer :- success with Picnics for Geeks across the globe, more info at', u':zelazny.freenode.net 372 newc0mer :- [http://geeknic.org]', u':zelazny.freenode.net 372 newc0mer :-', u':zelazny.freenode.net 372 newc0mer :- freenode is a service of Peer-Directed Projects Center Ltd,', u':zelazny.freenode.net 372 newc0mer :- a not for profit organisation registered in England and Wales.', u':zelazny.freenode.net 372 newc0mer :-', u':zelazny.freenode.net 372 newc0mer :- If you support the work we do and wish to donate to the PDPC,', u':zelazny.freenode.net 372 newc0mer :- you may do so over at http://freenode.net/pdpc_donations.shtml', u':zelazny.freenode.net 372 newc0mer :-', u':zelazny.freenode.net 372 newc0mer :- Thank you for using freenode!', u':zelazny.freenode.net 372 newc0mer :-', u':zelazny.freenode.net 376 newc0mer :End of /MOTD command.', u':newc0mer MODE newc0mer :+i', u':NickServ!NickServ@services. NOTICE newc0mer :This nickname is registered. Please choose a different nickname, or identify via \x02/msg NickServ identify <password>\x02.']

dies ist der inhalt, welcher ich receive. mit einer for(each) gehe ich da durch...

dein vorschlag habe ich getestet, ist immer alles okay...

John W
03-08-2010, 21:38
Jetzt blick ich gar nix mehr...
Hier jetzt das, was ich zu verstehen glaube:
1) Im ersten Post, ersten Codeblock hast du eine Liste gepostet, die der 2. Codeblock ohne den 3. Codeblock ausgibt, wobei letzterer jedoch erscheinen sollte?
2) Der 4. Codeblock spuckt den 3. Codeblock aus (obwohl nicht im 1. Codeblock - sprich in der Liste - vorhanden)?
3) Der Codeblock in deinem letzten Post ist die gesamte Liste?
4) Aus der Liste von Punkt 3 willst du die NickServ-Meldungen in eine neue Liste kopieren?

Dann würde ich das so machen:

nickServMessages=[]
for i in messages:
if i.strip().startswith(u":NickServ!NickServ@services"):
nickServMessages+=[i]

newc0mer
04-08-2010, 16:15
Hallo John_W,

sry fuer die Verwirrungen...

1/ ja genau.
2/ nein. ich habe einen schlechten ersten codeblock genommen als beispiel. da sollte noch die NickServ Message als letzter eintrag vorhanden sein.
3/ ja
4/ ich moechte die die NickServ Message nicht kopieren - ich moechte sie nur "erkennen", damit ich dann die prozedur fuers aendern des botnamens einleiten kann.

newc0mer
04-08-2010, 16:30
ich hab nun bemerkt, dass der for- loop immer abbricht, wenn folgender eintrag in der liste auftaucht:

u':NickServ!NickServ@services. NOTICE newc0mer :This nickname is registered. Please choose a different nickname, or identify via \x02/msg NickServ identify <password>\x02.'
egal, ob ich den loop zb so:

for line in messages

oder so mache:

for index in range(len(buffer))
print buffer[index]

echt witzig... ich gehe davon aus, es ist ein python fehler... LOL.. ne scherz... frag mich echt wieso...

John W
04-08-2010, 16:36
Die Erkennung steckt in "if i.strip().startswith(u":NickServ!NickServ@services"):" schon drin!
Damit werden alle Nachrichten vom NickServ als solche erkannt.

newc0mer
04-08-2010, 20:41
hallo John_W

die erkennung ist nicht das problem. das problem ist, dass der loop abbricht, sobald in der list das element mit dem NickServ inhalt an der reihe ist. ich frage mich, ob das ein bug im interpreter ist... es gibt kein trace oder sonst was. das programm laeuft weiter. jedoch bricht der loop jeweils dann ab, wenn diese msg wieder kommt...

John W
04-08-2010, 20:51
Gib mal kompletten Source, ich seh mir das dann mal genauer an.

EDIT: Problem wurde gelöst.