ja also die riesige try-klammer hab ich am ende noch rumgesetzt, weil ich hoffte irgendwas noch abzufangen. war also eigentlich mal nicht da -> keine veränderung.
ich habe nun mit print ausdrücken versucht den fehler einzugrenzen und dabei passieren hier sehr merkwürdige dinge:
an einer bestimmten stelle im code führt eine print statement entweder zum seg-fault oder zum killed, d.h. wenn ichs auskommentiere läuft das programm bis es wie immer nach (in diesem fall) 26 url abbricht, wenn ich allerdings das print drin lasse, bricht das programm beim erstan mal an dieser stelle ab. das ganze passiert auch wenn ichs mit dem nächsten print versuche. komischer weise steht weiter hinten in der funktion ein print ('realm 1 OK !'), welches problemlos funktioniert.
hier nochmal der mit prints versehene code mit der gekennzeichneten stelle:
Code: Alles auswählen
def linkChecker(link, url):
try:
if link[:4]!='HTTP' and link[:3]!='FTP':
link = url+link
link = string.replace(link, '\n', '')
link = string.replace(link, '../', '')
req = urllib2.Request(link)
try:
print 'versuche Verbindung herzustellen...'
res = urllib2.urlopen(req)
if hasattr(res, 'code'):
returnLink = str(res.code)
else:
returnLink = '200'
print 'kein except'
return returnLink+' '+link
except StandardError, e:
print '1. except'
if hasattr(e, 'code'):
print 'Error hat Attribute e'
if e.code==401:
try:
print 'e = 401, versuche authline zu kriegen'
authline = e.headers.get('www-authenticate', '')
if not authline:
returnLink = 'no authline'
print 'no authline'
return returnLink+' '+link
#----------> AB HIER GIBT ES MIT PRINT PROBLEME!!!
#print 'versuche authjob zu kriegen'
authjob = re.compile(r'''(?:\s*www-authenticate\s*:)?\s*(\w*)\s+realm=['"](\w+)['"]''', re.IGNORECASE)
#print 'versuche matchjob zu kriegen'
matchjob = authjob.match(authline)
if not matchjob:
returnLink = 'authline badly formed'
print 'authline badly formed'
return returnLink+' '+link
#print 'versuche scheme zu kriegen'
scheme = matchjob.group(1)
#print 'versuche realm zu kriegen'
realm = matchjob.group(2)
if scheme.lower()!='basic':
returnLink = 'only basic authentication supported'
#print 'only basic authentication supported'
return returnLink+' '+link
if realm=='xxx' or realm=='yyy':
base64string = base64.encodestring('%s:%s' % ('xxx','xyx'))[:-1]
authheader = "Basic %s" % base64string
req.add_header("Authorization", authheader)
try:
#print 'versuche autentifizierte Verbindung (1. Realm)herzustellen...'
res = urllib2.urlopen(req)
print 'hat geklappt...'
returnLink = str(res.code)
print 'realm 1 OK !'
return returnLink+' '+link
except StandardError, e:
returnLink = str(e)
print 'realm 1 NOT OK !'
return returnLink+' '+link
elif realm=='zzz':
base64string = base64.encodestring('%s:%s' % ('yyy','xxx'))[:-1]
authheader = "Basic %s" % base64string
req.add_header("Authorization", authheader)
try:
print 'versuche autentifizierte Verbindung (2. Realm)herzustellen...'
res = urllib2.urlopen(req)
returnLink = str(res.code)
print 'realm 2 OK !'
return returnLink+' '+link
except StandardError, e:
returnLink = str(e)
print 'realm 2 NOT OK !'
return returnLink+' '+link
except StandardError, e:
returnLink = str(e)
print 'problem ! !'
return returnLink+' '+link
else:
returnLink = str(e.code)
print 'e.code != 401'
return returnLink+' '+link
elif '550' in str(e):
returnLink = '550'
print 'e.code nicht vorhanden, sollte 550 sein'
return returnLink+' '+link
else:
returnLink = str(e)
print 'e.code nicht vorhanden'
return returnLink+' '+link
except StandardError, e:
print 'keine ahnung'
return str(e)
so ich bin ratlos. is der speicher im eimer? oder was ist hier los?
danke und ciao
sk
Edit (Leonidas): Code in Python-Tags gesetzt.