2015-03-10 18 views
5

Ho un'app basata su Python che controlla i LED. Usa Flask per creare un server web in modo da poter lavorare con una bella interfaccia utente usando HTML, CSS e JS.Esegui script python all'avvio di node-webkit (nw.js)

mio processo in corso:

  1. python home.py
  2. passare alla localhost:5000 browser
  3. profitto!

Mi piacerebbe prendere un ulteriore passo avanti e confezionare in su come un (ex node-webkit) App nw.js.

Fondamentalmente, credo semplicemente bisogno di eseguire il mio script python prima del caricamento della finestra, in modo che la mia provato e vero e proprio server web pallone prende il via e crea una pagina localhost:5000 per la mia interfaccia nw.js app per aprirsi.

Come posso impacchettare la mia app nw.js in modo da eseguire uno script python all'avvio?

+0

sufficiente lanciare il frontend nodo-webkit dallo script python tramite 'subprocess.Popen' –

risposta

3

È possibile creare una pagina di caricamento e visualizzare l'app effettiva dopo l'avvio del server Web.

package.json:

{ 
 
    "name": "pythonApp", 
 
    "version": "0.0.0", 
 
    "main": "loading.html", 
 
    "window": { 
 
    "title": "App Name", 
 
    "width": 800, 
 
    "height": 600, 
 
    "position": "center", 
 
    } 
 
}

Il caricamento della pagina (loading.html) caricherà un file js che lancia la pagina effettiva applicazione come una finestra nascosta e si può poi mostrarlo quando il server è in esecuzione.

loading.html:

var gui = require('nw.gui'); 
 

 
var currentWindow = gui.Window.get(); // Get reference to loading.html 
 

 
var exec = require('child_process').execFile; 
 
exec('home.py', {cwd:'.'}, function (error, stdout, stderr){ // Runs your python code 
 
    var appWindow = gui.Window.open('app.html', // Starts your application 
 
    { width: 800, 
 
     height: 600, 
 
     position: 'center', 
 
     focus: false, 
 
     transparent: true // This hides the application window 
 
    } 
 
); 
 
appWindow.on('loaded', function() { // Waits for application to be loaded 
 
    currentWindow.close({force: 'true'}); // Closes loading.html 
 
    appWindow.show(); // Shows app.html 
 
    appWindow.focus(); // Set the focus on app.html 
 
    }); 
 
});

In ogni caso, che è l'essenza di esso, ma potrebbe essere necessario apportare modifiche per la vostra particolare configurazione. Spero che sia d'aiuto.

+0

Questo carica le finestre app, ma non sembra eseguire lo script Python. Cosa mi manca? – Prinsig

0

Utilizzare il modulo child_process del nodo e richiamarlo da index.html.

Qualcosa di simile:

<!DOCTYPE html> 
<html> 
    <head> 

    </head> 
    <body> 
    <script> 
     var child_process= require('child_process'); 
     child_process.spawn('python home.py'); 
    </script> 
    </body> 
</html> 

(codice non testato, unico esempio)