hmm: Serverseitiges JavaScript soll Serverseitiges Pythonscript ansprechen

Hi,

habt ihr mal eine Anleitung wie ich mit einem serverseitigem JavaScript ein auf dem Server liegendes Python Script ansprechen kann?

  1. sowas wie node.js mit child_process.exec?

    1. Ich habe einen win32 Server auf dem NodeJs läuft. Clientseitig hab ich JavaScript und Serverseitig nochmal JavaScript.

      Jetzt brauch ich Serverseitig noch eine Sprache mit sehr Mathematischen Bibliotheken (Optimierung, Geometerie, Numerische Mathematik, Differentialgleichungen etc.) also C++, R oder Python. C++ bekomme ich mit Node JS unter 32bit nicht zum laufen (unter Ubuntu 64bit schon) und auf den versuch R auf einem Win-Server zu installieren hab ich kein Bock gerad. Darum würde ich gerne Python nehmen.

      Mein Serverseitiges JavaScript setzt meine index.html und mein Clientseitiges JavaScript. Das ClientSeitige JavaScript soll jetzt eine Python Funktion aufrufen können. (Später tausch ich das Python zeug dann vielleicht doch gegen C++ aus)

      1. Hello,

        wozu ist eigentlich shelljs gut?

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es
        Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
        1. danke.

          shell.echo("python test.py")

          wie lese ich damit die antwort in der console?

          1. Hello,

            shell.echo("python test.py")

            wie lese ich damit die antwort in der console?

            Pipelining, Ausgabekanal angeben.

            exec('some_long_running_process', function(code, stdout, stderr) {
              console.log('Exit code:', code);
              console.log('Program output:', stdout);
              console.log('Program stderr:', stderr);
            });
            

            Liebe Grüße
            Tom S.

            --
            Es gibt nichts Gutes, außer man tut es
            Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
            1. danke! das ist noch besser als dass was ich gerade gemacht habe

      2. Mein server.js File sieht mit C++ aufruf so aus:

        var express = require('express');
        var app = express();
        const addon = require('./build/Release/hello');
        
        app.use(app.router);
        
        app.use("/boot/css",  express.static(__dirname + '/boot/css'));
        app.use("/boot/js", express.static(__dirname + '/boot/js'));
        app.use("/boot/img",  express.static(__dirname + '/boot/img'));
        
        app.get('/', function(req, res){
            res.sendfile('index.html', { root: __dirname + "/" } );
        });
        
        app.get('/app', function(req, res) {
             res.setHeader('Content-Type', 'application/json');
             res.send(JSON.stringify({ antwort:  addon.hello()}));
         });
         
        app.listen(8080);
        

        Geht das so ähnlich mit Pythonfunktionen?

        1. danke läuft!

          var express = require('express');
          var app = express();
          var shell = require('shelljs')
          //const addon = require('./build/Release/hello');
          
          app.use(app.router);
          
          app.use("/boot/css",  express.static(__dirname + '/boot/css'));
          app.use("/boot/js", express.static(__dirname + '/boot/js'));
          app.use("/boot/img",  express.static(__dirname + '/boot/img'));
          
          app.get('/', function(req, res){
              res.sendfile('index.html', { root: __dirname + "/" } );
          });
          
          app.get('/app', function(req, res) {
               res.setHeader('Content-Type', 'application/json');
               var str = shell.exec('python test.py').stdout;
               console.log(str);
               res.send(JSON.stringify({ antwort: str}));//addon.hello()
           });
           
          app.listen(8080);
          
  2. Das ganze läuft jetzt auf meinem Ubuntu Server, aber auch meinem Windows Server nicht:

    var express = require('express');
    var app = express();
    var shell = require('shelljs')
    //const addon = require('./build/Release/hello');
    
    //app.use(app.router);
    
    app.use("/boot/css",  express.static(__dirname + '/boot/css'));
    app.use("/boot/js", express.static(__dirname + '/boot/js'));
    app.use("/boot/img",  express.static(__dirname + '/boot/img'));
    
    app.get('/', function(req, res){
        res.sendfile('index.html', { root: __dirname + "/" } );
    });
    
    app.get('/app', function(req, res) {
         res.setHeader('Content-Type', 'application/json');
         var str = shell.exec('python test.py').stdout;
         console.log(str);
         res.send(JSON.stringify({ antwort: str}));//addon.hello()
     });
     
    app.listen(8080);
    

    Fehlermeldung:

    events.js:160

      throw er; // Unhandled 'error' event
    
      ^
    

    Error: listen EADDRINUSE 0.0.0.0:8080

    at Object.exports._errnoException (util.js:1026:11)
    
    at exports._exceptionWithHostPort (util.js:1049:20)
    
    at Server._listen2 (net.js:1257:14)
    
    at listen (net.js:1293:10)
    
    at Server.listen (net.js:1389:5)
    
    at EventEmitter.listen (D:\home\site\wwwroot\node_modules\express\lib\application.js:618:24)
    
    at Object.<anonymous> (D:\home\site\wwwroot\server.js:36:5)
    
    at Module._compile (module.js:570:32)
    
    at Object.Module._extensions..js (module.js:579:10)
    
    at Module.load (module.js:487:32)
    

    Woran kann das liegen?

    1. mit

      app.listen(process.env.PORT || 8000);

      ging die fehlermeldung unter dem win-Server weg. Aber leider stimmen die Routen nicht....

      1. okay, fehler gefunden.…

        var shell = require('shelljs')

        da musste ein ";" zugefügt werden damit es auf dem win-server geht!

        1. Hello,

          okay, fehler gefunden.… var shell = require('shelljs') da musste ein ";" zugefügt werden damit es auf dem win-server geht!

          Schön, dass Du das rückgemeldet hast. Das hilft den nächsten Suchenden. Mein +1 dafür :-)

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es
          Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.