Ich habe ein Basis-Python-Projekt, das andere Python-Dateien akzeptieren und als Unterprozess ausführen kann. Das Basisprojekt akzeptiert Benutzereingaben, führt sie dem Unterprozess zu, der dann Code ausführt, und gibt einen Wert über stdout zurück, der an den Benutzer zurückgegeben wird.Python Subprozess steuernden Ausgang
Im Basisprogramm, das ich auf etwas ähnliches tue:
dataReturnValue = subprocess.check_output(['python', pythonScriptPath, json.dumps(inputParams)])
dann im subprocess Ich habe so etwas wie dies:
inputParams = sys.argv[1]
...
...
sys.stdout.write(returnValue)
Die Daten korrekt zurückgegeben werden, aber was ich d mag es, wenn die zurückgegebenen Daten auf den returnValue beschränkt sind. Im Moment gibt es alle print-Anweisungen im Subprozess und den Rückgabewert zurück. Das macht für mich Sinn, da es sich um eine Ausgabeform handelt und der Ausdruck einem Standard-Wrapper ähnlich ist, aber ich möchte das besser kontrollieren.
Gibt es eine Möglichkeit, den Stdout-Puffer direkt vor meiner endgültigen Ausgabeanweisung zu löschen, so dass keine Streuausdrucke oder Ausgaben in dem vom Unterprozess zurückgegebenen Wert enthalten sind?
Edit: Ich habe versucht, eine sys.stdout.buffer.flush(), sys.stdout.flush() kurz vor dem letzten Aufruf in der Hoffnung, dass es den Puffer löschen würde, aber die print-Anweisungen noch vor scheinbar mit dem endgültigen Rückgabewert gesendet werden.
Wenn es sich um ein Python-Skript handelt, ist die Verwendung von 'subprocess' möglicherweise nicht der beste Weg. Wenn Sie sich diesem Ansatz verschrieben haben, sollten Sie vielleicht einen Sentinel-Wert drucken, der ein Trennzeichen ist.Zum Beispiel 'print ('SENTINEL', end = '')' und dann 'value = dataReturnValue.split ('SENTINEL') [- 1]' - Aber im Idealfall willst du nur das Skript importieren und die Funktionen aufrufen . – sytech