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é
String in Fileobjekt konvertieren?
-
- User
- Beiträge: 6
- Registriert: Mittwoch 18. Juli 2007, 17:21
- Kontaktdaten:
- 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
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
-
- 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...
Du bekommst keine Dateideskriptor sondern ein Dateiobjekt. Wie schon gesagt, solltest Du das einfach an einen Namen binden und dann benutzen.
- 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
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.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- 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 und damit dann weiter arbeiten?
Wieso kannst du deine Operation nicht direkt anhaengen... also zB
Code: Alles auswählen
open("/tmp/my_jython_test", "r").read()
[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
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
-
- User
- Beiträge: 6
- Registriert: Mittwoch 18. Juli 2007, 17:21
- Kontaktdaten:
Danke Euch allen für die schnellen Antworten
@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...
@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...
Was bitte ist `Jython()` in diesem Zusammenhang? Dir ist klar, dass Du die offene Datei der Funktion(?) `Jython()` übergibst!?
-
- 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...
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...
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!?
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!?
-
- 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:Nur int(i)+1 ist im Jython
Code: Alles auswählen
i = 2
i = Jython(int(i)+1)
mal getestet ob Jython() intern die Objekte am Leben hält?
Frag mich nur gerade wie das ganze in sachen Einrückung aussehen soll?!
Worin startest du denn diesen Quelltext denn du da angegeben hast ?
Code: Alles auswählen
Jython(f=open("/tmp/my_jython_test", "w")
Jython(f.read())
Worin startest du denn diesen Quelltext denn du da angegeben hast ?
-
- 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
Gestartet wird das ganze im Workflow Tool.
Ich machs jetzt mit Java - da sollte es funktionieren...
Gruß Andre