Python in c++ => socket Problem

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.
hobbes_dmS
User
Beiträge: 11
Registriert: Mittwoch 18. April 2007, 13:15

Python in c++ => socket Problem

Beitragvon hobbes_dmS » Dienstag 24. April 2007, 12:01

hi,
ich bin gerade dabei mir einen logger in python zu schreiben, um statusmeldungen aus c++ anzuzeigen.
dazu habe ich zwei py-Scripte, das eine macht ein kleines Fenster auf und horcht auf einem port.
das zweite Skript ist eine einzelne Methode, die eine Verbindung zum entsprechenden port des Listeners aufbaut und die Daten rüberschickt.

in der IDLE funktioniert das auch alles wunderbar, wenn ich mein "sendescript" aber aus c++ heraus aufrufe, bekomme ich folgende Fehlermeldung:

Traceback (most recent call last):
File "d:\Programming\PythonPP\logger.py", line 8, in logMsg
import socket
File "D:\Programming\Python25\Lib\socket.py", line 45, in <module>
import _socket
ImportError: No module named _socket


jemand eine Ahnung was ich tun kann, um socket korrekt zu importieren?
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Beitragvon Masaru » Dienstag 24. April 2007, 22:11

Hmmm ... ich würde auf eine fehlerhafte Installation tippen (oder gar Kompilierung).

Welche Version von Python hast du denn installiert (2.5 oder 2.5.1 - Development, Release oder Final)?
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Mittwoch 25. April 2007, 00:19

Wie "rufst du das Skript aus C++ auf"?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
hobbes_dmS
User
Beiträge: 11
Registriert: Mittwoch 18. April 2007, 13:15

Beitragvon hobbes_dmS » Mittwoch 25. April 2007, 07:52

Masaru hat geschrieben:Hmmm ... ich würde auf eine fehlerhafte Installation tippen (oder gar Kompilierung).

Welche Version von Python hast du denn installiert (2.5 oder 2.5.1 - Development, Release oder Final)?


tatsächlich, das scheint so zu sein.
im release build geht es.
installiert habe ich 2.5, da mir beim windows-installer allerdings die "python_d.dll" und die "python_d.dll" gefehlt haben, habe ich nochmal den py-source runtergeladen und selbst kompiliert, danach hatte ich auch die fehlenden Dateien... die hab ich dann einfach in die entsprechenden Ordner kopiert.
allerdings habe ich ohne das bsddb-Modul kompiliert. ist das schon der Fehler?

@ birkenfeld: der aufrufende Code ist nix spannendes:



Code: Alles auswählen

int main(int argc, char *argv[])
{
   string message = "helas!";
   Py_Initialize();   
   PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue, *pMessage;
   pName = pModule = pDict = pFunc = pArgs = pValue = pMessage = 0;

   pMessage = PyString_FromString(message.c_str());

   // Initialize the Python Interpreter
   //Py_Initialize();

   // Build the name object
   pName = PyString_FromString("logger");

   // Load the module object
   if(pName)
      pModule = PyImport_Import(pName);

   // pDict is a borrowed reference
   if(pModule)
      pDict = PyModule_GetDict(pModule);

   // pFunc is also a borrowed reference
   if(pDict)
      pFunc = PyDict_GetItemString(pDict, "logMsg");

   if (pFunc && PyCallable_Check(pFunc)) {
      pArgs = PyTuple_New(1);
      PyTuple_SetItem(pArgs, 0, pMessage);
      if(pArgs){
         pValue = PyObject_CallObject(pFunc,pArgs );
         if (pValue) {   
            long l =  PyInt_AsLong(pValue);
            std::stringstream s;
            s << l;
            std::string asd = s.str();
            //printf("Return of call : %d\n", PyInt_AsLong(pValue));
            Py_DECREF(pValue);
         }else{
            PyErr_Print();
         }
      }
   }
   else{
      PyErr_Print();
   }
   // Clean up
   if(pModule)
      Py_DECREF(pModule);
   if(pName)
      Py_DECREF(pName);
   if(pMessage)
      Py_DECREF(pMessage);

   // Finish the Python Interpreter
      Py_Finalize();
   return 0;
}



thx für eure Hilfe :D
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Mittwoch 25. April 2007, 18:40

Ich denke das dort wo das C++ Programm liegt auch aus dem Python-Ordner "DLLs" die Datei "_socket.pyd" kopiert werden muss.

Evl. und / oder die _socket.lib aus dem Lib Verzeichnis.

Das war zumindest so als ich Python in Gamestudio genutzt habe. Kann mich aber nur noch schwach daran erinnern.
hobbes_dmS
User
Beiträge: 11
Registriert: Mittwoch 18. April 2007, 13:15

Beitragvon hobbes_dmS » Donnerstag 26. April 2007, 13:26

Sr4l hat geschrieben:Ich denke das dort wo das C++ Programm liegt auch aus dem Python-Ordner "DLLs" die Datei "_socket.pyd" kopiert werden muss.

Evl. und / oder die _socket.lib aus dem Lib Verzeichnis.

Das war zumindest so als ich Python in Gamestudio genutzt habe. Kann mich aber nur noch schwach daran erinnern.


wow, super, vielen Dank, das war's!
*freu*

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder