Marshal Embedded Commands

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DonnerCobra
User
Beiträge: 53
Registriert: Mittwoch 9. April 2008, 19:35

Samstag 13. September 2008, 01:21

Hi!

Ich habe eine Frage, und zwar habe ich eine PYC Datei die ich auf meinem System kompiliert habe. Jedoch stürzt Windows immer beim Aufruf von PyMarshal_ReadObjectFromFile(FILE* p) ab.

Hat damit evtl. jemand Erfahrung.

Code: Alles auswählen

static FILE *check_compiled_module (char * cpathname)
{
  FILE *fp;
  long magic;
  long pyc_mtime;

  fp = fopen (cpathname, "rb");
  if (fp == NULL)
    return NULL;
  
  magic = PyMarshal_ReadLongFromFile (fp);
  if (magic != PyImport_GetMagicNumber())
    {
      fclose(fp);
      return NULL;
    }
  
  pyc_mtime = PyMarshal_ReadLongFromFile (fp);

  return fp;
}


int main(){
	PyObject *main, *maindict, *result, *error; PyCodeObject *code;
	Py_Initialize();

	FILE * fp;
	long mtime;


	main = PyImport_AddModule ("__main__");
		if (!main)
			return false;

	maindict = PyModule_GetDict (main);

	if ((fp = check_compiled_module ("C:/test.pyc")))
	{ 
	code = (PyCodeObject *)PyMarshal_ReadObjectFromFile (fp);
		if (! code)
			return false;
	}


 result = PyEval_EvalCode (code, maindict, maindict);
 Py_DECREF (code);

  Py_XDECREF (result);

	if ((error = PyErr_Occurred()))
		if (error != PyExc_SystemExit)
			PyErr_Print();

Py_Finalize();
return true;

}

Auf Mac läuft alles bestens und ohne Probleme.

Ich danke euch. P.S. Das Problem besteht bei Windows 32, und 64.

Cu
DonnerCobra
User
Beiträge: 53
Registriert: Mittwoch 9. April 2008, 19:35

Samstag 13. September 2008, 12:55

Hi!

Ich habe einen schnippsel im Internet gefunden, dort genau dasselbe Problem. Unter Mac läuft alles wunderbar, unter Windows stürzt PyMarshal_ReadObjectFromFile() einfach ab.

Ich kann es mir nicht erklären :-/.

Wie gesagt, eventuell hat einer einen Rat.
Bye!
DonnerCobra
User
Beiträge: 53
Registriert: Mittwoch 9. April 2008, 19:35

Samstag 13. September 2008, 20:05

Hi!

Kann es sein das das Marshal Modul auf C Ebene sowieso einen Bug hat?

Selbst der Code hier funktioniert unter OSX Leopard wunderbar, unter Windows jedoch verabschiedet sich das Programm.

Code: Alles auswählen

int main (int argc, char * const argv[]) {
	Py_Initialize();
 
	FILE* fp = fopen("/Users/test/Desktop/123.pyc","wb");
	PyCodeObject* op = (PyCodeObject*)Py_CompileString("import sys\nprint 'hello'","<string.py>",Py_file_input);
	PyMarshal_WriteObjectToFile((PyObject *)op, fp, Py_MARSHAL_VERSION);
 
	Py_Finalize();
 
    return 0;
}
Antworten