Weil die Frage aufgetaucht ist, wie man über STDOUT und STDIN Daten von einem Prozess zum anderen schicken kann...
Hier eine mögliche Lösung, die mit **cPickle** arbeitet.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
sender.py
Demonstriert die Datenübergaben eines gepickelten Dictionaries an STDIN
eines anderen Prozesses.
"""
import cPickle
import subprocess
import os
import os.path
import sys
#----------------------------------------------------------------------
def main():
"""
Stellt ein Dictionary zusammen, das zuerst in einen String
gepickelt und dann an den STDIN des aufgerufenen Programmes
übergeben wird.
"""
# Dictionary zusammenstellen
mydict = {
"vorname": "Gerold",
"nachname": "Penz",
"ort": "Oberhofen im Inntal",
}
# Dictionary in einen String pickeln
datastring = cPickle.dumps(mydict, 2)
# Prozess aufrufen
proc = subprocess.Popen(
(sys.executable, "empfaenger.py"),
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
cwd = os.curdir
)
# In den STDIN des neuen Prozesses wird der Datenstring geschrieben
proc.stdin.write(datastring)
# STDIN des neuen Prozesses schließen, damit dieser weiter machen kann.
proc.stdin.close()
# STDOUT des neuen Prozesses auslesen und anzeigen
print "Vom Sender empfangen und geschrieben:"
print proc.stdout.read()
# STDOUT des neuen Prozesses schließen
proc.stdout.close()
#----------------------------------------------------------------------
if __name__ == "__main__":
main()
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
empfaenger.py
Demonstriert die Datenübernahme eines gepickelten Dictionaries von STDIN.
"""
import cPickle
import sys
#----------------------------------------------------------------------
def main():
datastring = sys.stdin.read()
mydict = cPickle.loads(datastring)
print mydict
#----------------------------------------------------------------------
if __name__ == "__main__":
main()
Gerold

EDIT: WARNUNG!!! Dieses Beispiel funktioniert nicht im IDLE.
Endlich mal ein funktionierendes Beispiel eines Programms, das nicht unter Idle läuft.

Getestet unter Windows mit Idle 1.1.1.
EDIT2: Statt dem hart gecodeten Pfad zu Python wird jetzt "sys.executable" verwendet. Damit dürfte es unter Linux und Windows, auch bei verschiedenen Python-Installationen, funktionieren.