Script stockt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
EmJay1974
User
Beiträge: 3
Registriert: Sonntag 5. Mai 2013, 11:27

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?
Zuletzt geändert von Anonymous am Sonntag 5. Mai 2013, 11:41, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
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.
EmJay1974
User
Beiträge: 3
Registriert: Sonntag 5. Mai 2013, 11:27

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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:
Das Leben ist wie ein Tennisball.
EmJay1974
User
Beiträge: 3
Registriert: Sonntag 5. Mai 2013, 11:27

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
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

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
Antworten