Fehlerausgabe umleiten?

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Mittwoch 20. Oktober 2010, 22:42

Hallo,
kurz zur aktuellen Lage: Python 2.7 wird in ein Spiel integriert.
Problem: Falls Fehler auftreten, werden diese nicht in der Console des Spiels angezeigt.
Das komische daran ist aber, dass alles was ich mit "print" schreibe, sehr wohl in der Console des Spiels angezeigt wird?!

Wie leite ich nun die Tracebacks auf die Console um? Jedes mal ein

Code: Alles auswählen

if (PyErr_Occured())
{
    PyErr_Print();
}
kann doch nicht die Lösung sein, oder?

Habe schon versucht, dass ``traceback``-Module umzuschreiben:

Code: Alles auswählen

	PyObject *pyTraceback = PyImport_ImportModule("traceback");
	if (pyTraceback)
	{
		PyObject *pyPrintException = PyObject_GetAttrString(pyTraceback, "print_exception");

		if (pyPrintException)
		{
			PySys_SetObject("excepthook", pyPrintException);
			Py_DECREF(pyPrintException);
		}

		Py_DECREF(pyTraceback);
	}
Aber das ändert nichts, Fehler werden nicht angezeigt :/

Bin dankbar für Tipps!

Gruß
Grüßle.
BlackJack

Mittwoch 20. Oktober 2010, 23:53

@Chrisber: Wird `sys.stderr` denn in die Konsole vom Spiel umgeleitet oder nur `sys.stdout`?
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Donnerstag 21. Oktober 2010, 00:07

Keine Ahnung. Ich habe nichts gemacht um irgendwas umzuleiten. Das "print" funktioniert anscheinend ganz von selbst.

Edit: habe mal alles 3 ausgegeben im Script:

Code: Alles auswählen

print "via print-Statement"
sys.stdout.write("via sys.stdout")
sys.stderr.write("via sys.stderr")
Es wird jeder Satz angezeigt (Windows).

Gruß
Grüßle.
Antworten