ich würde gerne einen wrapper für die commandline schreiben und benutze dafür subprocess.Popen.
Dabei bekomme ich bei manchen interaktiven Prozessen keinen Output:
Code: Alles auswählen
from subprocess import Popen, PIPE
import os
cmd="python" # -u funktioniert auch nicht
p = Popen(cmd, stdout=PIPE, stderr=PIPE, stdin=PIPE, shell=False,
bufsize=0, env=os.environ.copy(), start_new_session=True)
#p.stdout.flush()
p.stdin.write(b"print(123)\n")
p.stdin.flush()
print("reading...")
print(p.stdout.read(1))
print("done")
Code: Alles auswählen
reading...
Wenn ich einen SyntaxFehler einbaue, bekomme ich wenigstens output für stderr
Code: Alles auswählen
p.stdin.write(b"asdf asdf\n")
Code: Alles auswählen
reading...
b''
done
b' File "<stdin>", line 1\r\n asdf asdf\r\n ^\r\nSyntaxError: invalid syntax\r\n'
Ich vermute, dass es daran liegt, dass Python den Output buffered, aber die -u Option hilft hierbei auch nicht.
Hat jemand eine Idee, wie man das auf Windows lösen kann?