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

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Hatl
User
Beiträge: 6
Registriert: Dienstag 6. Juni 2006, 15:22

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
Zuletzt geändert von Hatl am Donnerstag 8. Juni 2006, 14:28, insgesamt 1-mal geändert.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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!
Hatl
User
Beiträge: 6
Registriert: Dienstag 6. Juni 2006, 15:22

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
Hatl
User
Beiträge: 6
Registriert: Dienstag 6. Juni 2006, 15:22

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
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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())
Hatl
User
Beiträge: 6
Registriert: Dienstag 6. Juni 2006, 15:22

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
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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]
Benutzeravatar
beewee
User
Beiträge: 35
Registriert: Mittwoch 18. Januar 2006, 22:16

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
Hatl
User
Beiträge: 6
Registriert: Dienstag 6. Juni 2006, 15:22

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
Hatl
User
Beiträge: 6
Registriert: Dienstag 6. Juni 2006, 15:22

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
Antworten