Seite 1 von 1

Spyce Syntax bzw. tempfile.write u Parameter aus URL auslese

Verfasst: Dienstag 6. Juni 2006, 15:56
von Hatl
Hallo!

Ich versuche aus MS-Office Dokumenten pdf zu erzeugen. Dazu habe ich mir ServPDF1.6 runtergeladen. http://www.goermezer.de/content/view/20/357/
Leider handelt es sich hierbei um Python bzw. Spyce – Code, damit kenn ich mich aber leider nicht wirklich aus.

Im Code kommt folgendes vor:

Code: Alles auswählen

tempfile=open(tempdir + up_file, 'wb')
#Hier wird eine Datei erzeugt
tempfile.write(request.file('userfile').value)
#Hier wird der Inhalt einer Datei in die oben erzeugte Datei geschrieben
tempfile.close()
 # Hier wird die Datei wieder geschlossen
(Kommentare sind, was ich vermute dass passiert)

Ich möchte nun bei tempfile.write den Pfad zu einer Datei angeben, deren Inhalt in die erzeugte kommen soll. Wie mach ich dass.?

In dem File-Form auf welches mit request zugegriffen wird, steht auch ein Pfad zu einer Datei, ich möchte jetzt aber nicht das der Pafd „übergeben“ wird, sondern ihn da direkt eintragen.

Ich hoffe es kann mir jemad weiterhelfen, danke!!!

mfg

Verfasst: Dienstag 6. Juni 2006, 20:26
von murph
also da sind ja zwei variablen, die dann ersetzt werden müssten, wenn

Code: Alles auswählen

tempfile=open(tempdir + up_file, 'wb') 
keine variablen mehr in der "open"-Funktion sind.
Also einfach ma rausschauen, was tempdir und up_file sind!

Verfasst: Mittwoch 7. Juni 2006, 08:27
von Hatl
Hallo!

Erstmal Danke für die Antwort!

In tempdir steht der Pafd zur Datei und in up_file der Dateiname. Aber mit der Zeile will ich eh nix machen.
Ich möchte, wenn man mit tempfile.write in eine Datei schreibt, den Pfad zu der Datei angeben deren Inhalt rein geschrieben werden soll.
Oder macht tempfile.write was anderes?

Momentan wird der Pafd zur Datei mit Request.file von einem Formular übernommen, ich möchte den Pfad aber direkt. bzw. über einen Variable angeben, da ich den Pfad beim Aufruf über die URL übergeben möchte.
Tausche ich jetzt einfach das Request.file mit dem Pafd aus, steht in der erzeugten Datei einfach der Pfad den ich bei tempfile.write angegeben hab.

Danke!

mfg

Verfasst: Mittwoch 7. Juni 2006, 11:23
von Hatl
Hallo!

Ich hab es jetzt noch wie folgt versucht:

tempfile.write(open("d:\in\2.doc", "rb").read())

Da kommt folgender Fehler:


Message: IOError: [Errno 2] No such file or directory: 'd:\\in\x02.doc'


Stack: serverapp.spy:74, in (main):
tempfile.write(open("d:\in\2.doc", "rb").read())


Ist klar die Datei d:\\in\x02.doc gibt es nicht aber woher kommt das zweite \ und das x0?

Wenn ich versuche den Pfad einer Variable zuzuweisen, um diese dann beim write anzugeben, passiert das Selbe.

Woran liegt das bzw. wie mache ich es richtig?

Danke

Verfasst: Mittwoch 7. Juni 2006, 12:28
von murph
das liegt daran, dass die backslashes escapes auszeichnen.
einfach vor den anführungszeichen ein 'r' schreiben:

tempfile.write(open(r"d:\in\2.doc", "rb").read())

Verfasst: Donnerstag 8. Juni 2006, 09:53
von Hatl
Hallo!

Super, danke so funktioniert es!

Jetzt hätte ich aber noch eine Frage, wie kann ich mit spyce Variablen in der URL übergeben bzw. abfragen.

Also wenn ich http://test.spy?id=1 habe, wei bekommm ich im Script den Wert für id?

Danke!

mfg

Verfasst: Donnerstag 8. Juni 2006, 10:36
von Rebecca
Habe nicht viel Ahnung von Html-Requests und so, aber hier eine spontane Idee, wie man den Url-String zerlegen koennte:

Code: Alles auswählen

>>> url =  "http://test.spy?id=1"
>>> splitted = url.split("=") #String am Gleichheitszeichen trennen...
>>> print splitted
['http://test.spy?id', '1'] #...ergibt eine Liste mit den zwei Teilen
>>> id = splitted[-1] #Dies gibt das letzte Element der Liste
>>> print id
1
>>> 
Das ganze kannste in deinem Script natuerlich als Einzeiler schreiben:

Code: Alles auswählen

id = url.split("=")[-1]

Verfasst: Donnerstag 8. Juni 2006, 10:53
von beewee
Hm, ich würde es bisschen anders machen, sodass man auch mehrere GET-Variablen mitgeben kann:

Code: Alles auswählen

url = "http://meindedomain.com?abc=def&ghi=jkl"
args = url.split("?")[1]
args = args.split("&")
arguments = {}
for arg in args:
    arg = arg.split("=")
    arguments[arg[0]] = arg[1]

Code: Alles auswählen

>>> arguments
{'abc': 'def', 'ghi': 'jkl'}
[edit="BeeWee"]Natürlich muss da dann noch ein Errorhandling rein, falls z.B. kein argument mitgeben wurde[/edit]

BeeWee

Verfasst: Donnerstag 8. Juni 2006, 10:58
von Hatl
Super, danke!
Aber wie bekomm ich die URL überhaupt ins Script?
Mein Script heisst test.spy, ich rufe es z.B so auf http://localhost/test.spy?id=2&wert=sss

Wie bekomm ich jetzt die URL mit der ich das Script aufgerufen habe ins Script, um sie in einer Variable zu speichern? ich kann ja erst dann die übergeben Werte ermitteln.


Danke!

mfg

Verfasst: Donnerstag 8. Juni 2006, 14:47
von Hatl
Hallo!

Hab jetzt wie folgt versucht die URL ins Script zu bekommen:

Code: Alles auswählen

import os
print os.environ["QUERY_STRING"]
Somit sollte ich doch die URL bekommen bzw. sollte sie ausgegeben werden?
Ich bekomm aber nur folgenden Fehler:

KeyError: 'QUERY_STRING'

Laut doku bedeutet der Fehler das es den Key Query_String nicht gibt.

Aber was bedeutet das jetzt? Warum gibt es den nicht?

Grundsätzlich geht es darum:

Mein Script (test.spy) soll z.B wie folgt aufgerufen werden:

http://test.spy?id=4

Den Wert für id möchte ich im Script in einer Variabel haben, da abhängig von diesem Wert unterschiedlich dinge im Script abgearbeitet werden sollen.

In asp würd ich das z.B ganz einfach so machen:

variable=Request.Querystring("id")


Wie geht das mit python bzw. spyce?

Danke!

mfg