Seite 1 von 1

Script stockt

Verfasst: Sonntag 5. Mai 2013, 11:32
von EmJay1974
Ich habe folgendes Script:

Code: Alles auswählen

#usage: python downloadGigaPan.py 47710
# http://www.gigapan.com/gigapans/47710

from xml.dom.minidom import *
from urllib2 import *
from urllib import *
import sys,os,math

def getText(nodelist):
    rc = ""
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc = rc + node.data
    return rc

def find_element_value(e,name):
    nodelist = [e]
    while len(nodelist) > 0 :
        node = nodelist.pop()
        if node.nodeType == node.ELEMENT_NODE and node.localName == name:
            return getText(node.childNodes)
        else:
            nodelist += node.childNodes

    return None


#main

photo_id = int(sys.argv[1])
if not os.path.exists(str(photo_id)):
    os.makedirs(str(photo_id))

base = "http://www.gigapan.org"

# read the kml file
h = urlopen(base+"/gigapans/%d.kml"%(photo_id))
photo_kml=h.read()


# find the width and height, level 
dom = parseString(photo_kml)

height=int(find_element_value(dom.documentElement, "maxHeight"))
width=int(find_element_value(dom.documentElement, "maxWidth"))
tile_size=int(find_element_value(dom.documentElement, "tileSize"))

print (width,height,tile_size)


maxlevel = max(math.ceil(width/tile_size), math.ceil(height/tile_size))
maxlevel = int(math.ceil(math.log(maxlevel)/math.log(2.0)))
wt = int(math.ceil(width/tile_size))+1
ht = int(math.ceil(height/tile_size))+1
print (wt,ht,maxlevel)

#loop around to get every tile
for j in xrange(ht):
    for i in xrange(wt):
        filename = "%04d-%04d.jpg"%(i,j)
        url = "%s/get_ge_tile/%d/%d/%d/%d"%(base,photo_id, maxlevel,j,i)
        print (url, filename)
        h = urlopen(url)
        fout = open(str(photo_id)+"/"+filename,"wb")
        fout.write(h.read())
        fout.close()
Und es kommt jedes mal ddie Meldung:

Code: Alles auswählen

"Traceback (most recent call last):
  File "C:\Users\TOSHIBA\Desktop\sc2\downloadGigaPan.py", line 30, in <module>
    photo_id = int(sys.argv[1])
IndexError: list index out of range"
Ich komme nicht hinter den Fehler! Kann da jemand weiterhelfen?

Re: Script stockt

Verfasst: Sonntag 5. Mai 2013, 11:44
von BlackJack
@EmJay1974: Du gibst beim Aufruf auf der Kommandozeile offensichtlich das erforderliche Argument nicht an. Schau mal in die erste Zeile, da wird irgend eine Zahl an das Programm übergeben.

Edit: Das Programm ist übrigens qualitativ nicht besonders. Die Sternchenimporte müllen den Modulnamensraum voll, wobei es garantiert Namenskollisionen bei den beiden `urllib*`-Modulen geben wird.

`minidom` verwenden eigentlich nur Java-Programmierer die nicht wissen, dass es `xml.etree` gibt, was eine deutlich „pythonischere” API hat, und ausserdem die `find_element_value()`-Funktion unnötig macht.

Die Namen sind fast alle schlecht gewählt.

`math.ceil()` wird fast immer unnötigerweise verwendet.

Re: Script stockt

Verfasst: Sonntag 5. Mai 2013, 19:05
von EmJay1974
BlackJack hat geschrieben:@EmJay1974: Du gibst beim Aufruf auf der Kommandozeile offensichtlich das erforderliche Argument nicht an. Schau mal in die erste Zeile, da wird irgend eine Zahl an das Programm übergeben.

Edit: Das Programm ist übrigens qualitativ nicht besonders. Die Sternchenimporte müllen den Modulnamensraum voll, wobei es garantiert Namenskollisionen bei den beiden `urllib*`-Modulen geben wird.

`minidom` verwenden eigentlich nur Java-Programmierer die nicht wissen, dass es `xml.etree` gibt, was eine deutlich „pythonischere” API hat, und ausserdem die `find_element_value()`-Funktion unnötig macht.

Die Namen sind fast alle schlecht gewählt.

`math.ceil()` wird fast immer unnötigerweise verwendet.
Okay. Ist das Script eines Freundes. Darum werde ich aus dem auch nicht schlau! :D

Re: Script stockt

Verfasst: Sonntag 5. Mai 2013, 19:38
von EyDu
EmJay1974 hat geschrieben:Okay. Ist das Script eines Freundes. Darum werde ich aus dem auch nicht schlau! :D
Aus dem Script oder aus dem Freund? SCNR :lol:

Re: Script stockt

Verfasst: Sonntag 5. Mai 2013, 20:08
von EmJay1974
EyDu hat geschrieben:
EmJay1974 hat geschrieben:Okay. Ist das Script eines Freundes. Darum werde ich aus dem auch nicht schlau! :D
Aus dem Script oder aus dem Freund? SCNR :lol:
Aus dem Script. Läuft immer noch nicht. Darum sollte ich es wohl besser einfach mal in den Papierkorb verschieben. :D

Re: Script stockt

Verfasst: Sonntag 5. Mai 2013, 22:24
von nomnom
EmJay1974 hat geschrieben:Läuft immer noch nicht. Darum sollte ich es wohl besser einfach mal in den Papierkorb verschieben. :D
Vielleicht solltest du deinen Freund fragen, wie man es benutzt oder warum es nicht funktioniert? ;) In der ersten Zeile der Datei steht übrigens, wie man es benutzt. python downloadGigaPan.py ZAHL