2016-04-10 9 views
0

Ich habe dieses Problem mit einem Python-Skript, das ich schreibe, die eine EXE-Datei (subProcess.Popen) aufruft. Ich umadressiere das stdout und stderr zu PIPE, aber ich kann keine Ausgabe lesen (subprocess.Popen.stdout.readline()).Ausgabe der exe in Qt und C++ geschrieben

Ich habe versucht, die Exec-Datei in Windows-CLI auszuführen und sowohl stdout und stderr umleiten ... und nichts passiert. Also denke ich, dass es in dieser Qt-App kein stdout und stderr gibt.

Gibt es eine Möglichkeit, zu den Daten zu gelangen, die diese exe auf dem Bildschirm (übrigens die Anwendung ist pivo.exe) druckt?

+0

Vielleicht könnten Sie sehen https://gist.github.com/Qix-/72db8d2828eb479e6c47 – Like

Antwort

0

Warning: Verwenden kommunizieren() und nicht .stdin.write, .stdout.read oder .stderr.read Deadlocks zu vermeiden, aufgrund einer der anderen Puffern OS Rohr füllt und den untergeordneten Prozess zu blockieren.

https://docs.python.org/3/library/subprocess.html#subprocess.Popen.stderr

bedeutet, dass etwas wie diese versuchen

process = subrocess.Popen(...) 
stdout, stderr = process.communicate() 
print(stdout) 
print(stderr) 
+0

yep! Ich habe .communicate() versucht, aber es wird dort als .stdout.readline() oder .stdout.read() angezeigt. Die Sache ist, dass offensichtlich (wie für die Tests, die ich im Windows-Befehl promt), diese App keine stdout oder stderr hat, so warum es dort bleibt, es wartet nur auf eine Ausgabe, aber es gibt keine. Während offensichtlich gibt es in der Eingabeaufforderung Bildschirm ausgegeben, aber ich denke, nicht an stdio weitergeleitet. Ich glaube, das ist etwas Spezifisches von Qt, aber ich weiß nicht viel darüber, wie Qt in den Befehl promt schreibt. – luckyshonway

0

Von http://doc.qt.io/qt-5/debug.html:

Mit Windows, wenn es sich um eine Konsolenanwendung ist, wird der Text auf die Konsole gesendet werden; Andernfalls wird an den Debugger gesendet.

Es gibt einen speziellen Debugkanal unter Windows (WinAPI-Funktion OutputDebugString). Siehe auch How does Qt5 redirect qDebug() statements to the Qt Creator 2.6 console

Nun ist es möglich, dass pivo.exe plain qDebug() verwendet, um die Ausgabe zu erzeugen, und schreibt somit in den Debug-Kanal. Sie könnten versuchen, dies zu überprüfen, indem Sie the tool DebugView verwenden.

In diesem Fall müssen Sie eine Möglichkeit finden, den Debug-Kanal von Python oder fork ptivo.exe zu lesen und dafür STDOUT/STDERR anstelle von qDebug() verwenden.

+0

toller einblick! habe nicht an debug-channel gedacht, aber ich fürchte, die ausgabe ist es auch keine debug-pipe. Versuchte mit DebugView und noch nichts. Auch versucht, den Debug-Kanal in Windows-Terminal umleiten (whatever_command 5> something.txt). Ich denke, ich muss eine andere Problemumgehung finden. – luckyshonway