String in Fileobjekt konvertieren?

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
andrekraut
User
Beiträge: 6
Registriert: Mittwoch 18. Juli 2007, 17:21
Kontaktdaten:

Hallo,

habe das Problem einen Interpreter benutzen zu müssen, der immer nur ein einziges Jython Kommandos ausführen kann. Wenn ich jetzt mit:

open("/tmp/my_jython_test", "r")

ein File öffne wird das File zwar geöffnet und ich bekomme den Descriptor zurück:

<file /tmp/my_jython_test, mode r at 1500732981>

aber wenn ich das nächste Kommando zum Lesen oder Schreiben aufrufe kann ich den Descriptor nur als String übergeben. Gibt es einen Weg dann aus dem String wieder ein Fileobjekt zu machen?

Gruß André
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Du kannst zum Beispiel mit os.read direkt von einem filedescriptor lesen.
Aber du hast wohl noch ein andere Problem, sobald die Garbage Collection vorbeikommt ist dein File wieder geschlossen ;)

Das wirst du anders lösen müssen ;)
andrekraut
User
Beiträge: 6
Registriert: Mittwoch 18. Juli 2007, 17:21
Kontaktdaten:

Danke für die Antwort - aber das os Modul mag er leider auch nicht...
BlackJack

Du bekommst keine Dateideskriptor sondern ein Dateiobjekt. Wie schon gesagt, solltest Du das einfach an einen Namen binden und dann benutzen.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo André!

Willkommen im Python-Forum!

Zu diesem Thema fällt mir dieser Link hier ein: http://www.python-forum.de/topic-6157.html Darin wird beschrieben, wie du auf Dateien zugreifen kannst.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

mmh... ist es jetzt zu einfach oder seh ich dein Problem falsch?

Wieso kannst du deine Operation nicht direkt anhaengen... also zB

Code: Alles auswählen

open("/tmp/my_jython_test", "r").read()
und damit dann weiter arbeiten?
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
andrekraut
User
Beiträge: 6
Registriert: Mittwoch 18. Juli 2007, 17:21
Kontaktdaten:

Danke Euch allen für die schnellen Antworten :D

@nkoehring: ja so hab ichs schon versucht - bei read tut es auch, aber bei write bleibt das File leer (und write ist das was ich brauche - habs auch mit "w" geöffnet). Meine Vermutung war, daß das so ist weil das close fehlt? Oder liege ich da daneben. Habe so gut wie keine Jython Erfahrung.

@BlackJack: Habe nach dem Öffnen kein Objekt mehr, sondern nur den
String mit dem Inhalt

"<file /tmp/my_jython_test, mode w at 1500732981>"

Dachte es könnte eine "magische" Schreibweise geben, die Jython sagt den String als ein Objekt zu interpretieren?

Vollständig lautet mein Code so:

f = Jython(open("/tmp/my_jython_test", "w"))
Jython(f.write("mein output"))

In der zweiten Zeile kommt dann der Fehler, das der String "f" keine Methode write kennt ... Der Inhalt von f ist aber der von oben.

Wahrscheinlich muss ichs doch anders lösen...
BlackJack

Was bitte ist `Jython()` in diesem Zusammenhang? Dir ist klar, dass Du die offene Datei der Funktion(?) `Jython()` übergibst!?
andrekraut
User
Beiträge: 6
Registriert: Mittwoch 18. Juli 2007, 17:21
Kontaktdaten:

Jython() ist der Aufruf meines Jython Interpreters. Er gibt die Ergebnisse als String zurück, weshalb mir ja das Objekt verloren geht. Aber vermutlich wäre das File beim 2. Aufruf eh schon wieder geschlossen?!?

Glaube es mach keinen Sinn dafür noch viel Zeit zu investieren. Ich dachte es gibt vielleicht sowas wie int() oder str() zur Typkonvertierung auch für Objekte und daß ich als Anfänger mit dem Thema nur noch nix davon mitbekommen habe. Wie veers schon sagte - muß ich wohl anders lösen...
BlackJack

Jetzt bin ich ein bisschen verwirrt. Nach dem was Du angegeben hast, wird `open()` *erst* ausgeführt und das Dateiobjekt *dann* Deinem Interpreter übergeben. Wie geht dass denn!?

Und ist `Jython` eine Klasse oder eine Funktion? Wenn es eine Klasse ist, dann würde es ja bedeuten, dass im Beispiel oben zwei Interpreter erzeugt werden!?
andrekraut
User
Beiträge: 6
Registriert: Mittwoch 18. Juli 2007, 17:21
Kontaktdaten:

Denke Jython ist eine Funktion... Ich benutze eine Workflow Sprache, die in Form des Jython() Aufrufs auch Jython benutzt (in der Hauptsache für Stringverarbeitung und zum Zählen). So wie ich das verstehe bin ich nur innerhalb der Klammern von "Jython()" in einem Jython Interpreter und der kann jeweils nur ein einziges Kommando ausführen. Wenn das Jython Kommando irgendwas zurückgibt (in meinem Fall das Fileobjekt vom open()), dann wird das an meinen Workflow zurück gegeben, aber dabei in einen String umgewandelt. Umgekehrt sind alle Variablen, die ich in das Jython() reingebe dort erst mal ein String. Will ich 1 zu einer Variable dazuzählen geht das nur so:

Code: Alles auswählen

i = 2
i = Jython(int(i)+1)
Nur int(i)+1 ist im Jython
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

mal getestet ob Jython() intern die Objekte am Leben hält?

Code: Alles auswählen

Jython(f=open("/tmp/my_jython_test", "w")
Jython(f.read())
Frag mich nur gerade wie das ganze in sachen Einrückung aussehen soll?!
Worin startest du denn diesen Quelltext denn du da angegeben hast ?
andrekraut
User
Beiträge: 6
Registriert: Mittwoch 18. Juli 2007, 17:21
Kontaktdaten:

Ja habe ich - schon die Zuweisung "f=" gibt Syntax Fehler.

Gestartet wird das ganze im Workflow Tool.

Ich machs jetzt mit Java - da sollte es funktionieren...

Gruß Andre
Antworten