Programme verbinden mit pipe?

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
klik
User
Beiträge: 2
Registriert: Mittwoch 30. Juli 2008, 21:50

Mittwoch 30. Juli 2008, 22:13

Hi, eigentlich lese ich hier nur mit und benutze fleißig die Suchfunktion, so konnte ich bis jetzt noch jedes meiner Python Problemchen lösen. Bis jetzt.


Da ich noch nicht mal 100% sicher bin mit welchem Ansatz ich das Problem lösen soll, beschreibe ich mal was ich vorhabe.


Also ich möchte aus einem Python-Programm ein zweites Python-Programm starten. Beide sollen dann unabhängig von einander laufen. Sprich das eine kann man beenden und wieder starten. Aber beide sollen noch miteinander kommunizieren können.

Nun kam mir die Idee das mit einer Pipe zu machen. Aber wie genau.
Habe dann auch von Sachen wie Popen 1 2 3 4, und subprocess gelesen.


Zum lesen

Code: Alles auswählen

import pipes
import time
print "pipe read"
t = pipes.Template()


for i in range(0,8):
    f = t.open('/home/....../pipe','r')
    print f.read()
    
    f.close()
    time.sleep(1)


Zum schreiben

Code: Alles auswählen

import pipes
import time
print "pipe send"
t = pipes.Template()
t.reset()

print "open"
for i in range(0,8):
    time.sleep(1)
    f = t.open('/home/........../pipe','w')
    print "                    " + str(i)
    f.write('hello world ' + str(i) + "  ")
    f.close()
f.close()
Die beiden Programme startet man in zwei Konsolen etc.
Leider muss ich die immer fleißig closen. Bzw. gefällt mir das so überhaupt nicht.




Die erste Idee war es, eine Datei anzulegen aber ich will eigentlich nicht ständig auf der Platte rumschaufeln. Wenn jemand weiß, wie ich das am besten anstelle wäre ich sehr dankbar. Ein paar code schnipsel würden mir da schon weiterhelfen. (Damit meine ich ausführliches Beispiel. :wink: Habe nämlich keine Ahnung und die Bücher in der UNI-Bib helfen da auch nicht weiter)

Schonmal besten dank
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 31. Juli 2008, 07:54

Hm ... also eigentlich ist eine PIPE doch eine Einbahnstraßenkommunikation, oder? Die Ausgabe eines Programms wird beim anderen als Eingabe verwendet. Ok, sollte man natürlich zwei Pipes in jeweils die andere Richtung öffnen können, dann gehts natürlich doch!

Da Du ja beidseitige Kommunikation willst fallen mir da spontan nur zwei Wege ein:

- Kommunikation per Netzwerk
- Verwendung von DBUS (http://www.freedesktop.org/wiki/Software/dbus)

Laut freedesktop.org gibts auch div. Python-Bindings dazu. Leider habe damit allerdings (noch) keine Erfahrung und kann Dir da nichts konkretes liefern. (Hab bisher immer KDEs DCOP verwendet, quasi das gleiche in grün, aber DCOP ist tot und DBUS lebt :-D )
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Donnerstag 31. Juli 2008, 09:19

Wie wäre es einfach [wiki=Threading_Beispiel1]threading[/wiki] zu benutzen oder gibt es irgendetwas dass da gegen spricht?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 31. Juli 2008, 09:32

DasIch hat geschrieben:Wie wäre es einfach [wiki=Threading_Beispiel1]threading[/wiki] zu benutzen oder gibt es irgendetwas dass da gegen spricht?
Funktionieren denn Threads Programm übergreifend?
klik
User
Beiträge: 2
Registriert: Mittwoch 30. Juli 2008, 21:50

Donnerstag 31. Juli 2008, 10:19

Threads waren auch ne Idee. Leider kommen beim testen ab und an Fehler ( das liegt aber an dem Programm aus dem ich es starte blender ) natürlich könnte man damit leben aber man programmiert ja bis alle Fehler und alle Warnungen weg sind.

@Hyperion
mir wurde auch gesagt, dass eine Pipe in beide Richtungen laufen kann. Aber zu not würden es ja auch zwei pipes machen. Das mit dem DBUS sieht interessant aus werde ich mir mal als letzte Möglichkeit offen halten.

Aber scheint ja doch der richtige weg gewesen zu sein. Hätte da jemand was besseres als meinen Versuch von oben?

schon mal besten dank
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 31. Juli 2008, 15:19

Hyperion hat geschrieben:- Kommunikation per Netzwerk
- Verwendung von DBUS (http://www.freedesktop.org/wiki/Software/dbus)

Laut freedesktop.org gibts auch div. Python-Bindings dazu. Leider habe damit allerdings (noch) keine Erfahrung und kann Dir da nichts konkretes liefern. (Hab bisher immer KDEs DCOP verwendet, quasi das gleiche in grün, aber DCOP ist tot und DBUS lebt :-D )
Das Python-Binding zu DBUS ist sogar erstaunlich simpel zu nutzen, grob vergleichbar mit XML-RPC.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 1. August 2008, 06:44

Leonidas hat geschrieben: Das Python-Binding zu DBUS ist sogar erstaunlich simpel zu nutzen, grob vergleichbar mit XML-RPC.
Ich hab mir gestern mal sponatn die Doku angeguckt ... da muss ich doch mal dringend was mit machen am WE :-D
Antworten