2015-03-10 28 views
5

Mam aplikację opartą na języku Python, która steruje diodami LED. Używa ona Flask do tworzenia serwera WWW, dzięki czemu mogę pracować z ładnym interfejsem użytkownika przy użyciu HTML, CSS i JS.Uruchamiaj skrypt Pythona na starcie węzła sieci Web (nw.js)

Mój obecny proces:

  1. python home.py
  2. przejdź do localhost:5000 w przeglądarce
  3. zysk!

Chciałbym zabrać go o krok dalej i pakować go jako nw.js (dawniej node-webkit) aplikacji.

Zasadniczo uważam, że po prostu trzeba wykonać skrypt Pythona przed załadowaniem okna, tak aby mój wypróbowany i prawdziwy serwer WWW z kolbą uruchomił się i utworzył stronę localhost:5000 dla interfejsu aplikacji nw.js do otwarcia.

Jak mogę spakować moją aplikację nw.js, aby podczas uruchamiania uruchamiał się skrypt Pythona?

+0

Wystarczy uruchomić frontend węzła WebKit ze skryptu Pythona poprzez 'subprocess.Popen' –

Odpowiedz

3

Możesz utworzyć stronę ładowania i renderować rzeczywistą aplikację po uruchomieniu serwera WWW.

package.json:

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

Strona załadunku (loading.html) ładuje plik js, który uruchamia aktualną stronę aplikacji w ukrytym oknie i można następnie pokazać je, gdy serwer biegnie.

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 
 
    }); 
 
});

Zresztą to jest sedno tego, ale być może trzeba będzie dokonać zmian dla danej konfiguracji. Mam nadzieję, że to pomoże.

+0

Ten ładuje okna aplikacji, ale wydaje się nie uruchamiać skrypt Pythona. czego mi brakuje? – Prinsig

0

Użyj modułu child_process węzła i wywołaj go z pliku index.html.

Coś jak:

<!DOCTYPE html> 
<html> 
    <head> 

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

(kod nie testowane, przykład)