2016-12-10 7 views
1

Ich baue gerade eine Shell in Python. Die Shell kann Python-Dateien ausführen, aber ich muss auch die Option zur Verwendung von PIPEs hinzufügen (zum Beispiel bedeutet '|', dass die Ausgabe des ersten Befehls die Eingabe des zweiten Befehls ist).Python stdout Umleitung (speziell)

Um dies zu tun, muss ich die Möglichkeit haben, zu nehmen, was der erste Befehl (Hinweis drucken würde, dass der Befehl nicht ein Systembefehl sein könnte, sondern eine Python-Datei, die die Zeile hat

print 'some information' 

ich brauche es in der Schale auf eine Variable weitergeben kann mir jemand helfen

Antwort

1

Sie sys.stdout auf eine in-Memory-BytesIO oder StringIO Datei-ähnliches Objekt umleiten kann.?

Ausgang

buffer contains: 'some information\nmore information\n' 
+0

Ich versuchte dies. Anstatt 'print' zu benutzen, habe ich os.system ('dir') ausprobiert. Es druckte immer noch auf dem Bildschirm, obwohl es 0 in den Buf bekam. Also nahm es diese Antwort, aber nicht das Drucken im Inneren verhindert ... :( – OphirBack

+0

@OphirBack Das liegt daran, dass 'os.system' in einer Subshell ausgeführt wird, die die ursprünglichen' stdin', 'stdout' und' stderr' Griffe der Shell erbt Es ist also nicht von der Umleitung betroffen, die mein Code ausführt. Aber Sie sollten 'os.system' nicht verwenden, außer für sehr einfache Dinge. Schauen Sie sich den [' subprocess'] (https://docs.python.org /2/library/subprocess.html) –

+0

@OphirBack Auch, ernsthaft in Betracht ziehen, Python 3 zu verwenden. Es gibt nicht viel Sinn, neue Dinge in Python 2 zu entwickeln, da es nicht sein wird unterstützt nach 2020. –

Verwandte Themen