Seite 1 von 1

Programme verbinden mit pipe?

Verfasst: Mittwoch 30. Juli 2008, 22:13
von klik
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

Verfasst: Donnerstag 31. Juli 2008, 07:54
von Hyperion
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 )

Verfasst: Donnerstag 31. Juli 2008, 09:19
von DasIch
Wie wäre es einfach [wiki=Threading_Beispiel1]threading[/wiki] zu benutzen oder gibt es irgendetwas dass da gegen spricht?

Verfasst: Donnerstag 31. Juli 2008, 09:32
von Hyperion
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?

Verfasst: Donnerstag 31. Juli 2008, 10:19
von klik
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

Verfasst: Donnerstag 31. Juli 2008, 15:19
von Leonidas
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.

Verfasst: Freitag 1. August 2008, 06:44
von Hyperion
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