在node-webkit startup(nw.js)上运行python脚本

时间:2015-03-10 13:02:25

标签: python desktop-application node-webkit nw.js

我有一个基于Python的应用程序来控制LED。它使用Flask来创建一个Web服务器,这样我就可以使用HTML,CSS和JS来处理一个很好的UI。

我目前的流程:

  1. python home.py
  2. 导航至浏览器中的localhost:5000
  3. 的利润!
  4. 我希望更进一步,将其打包为nw.js(以前的node-webkit)应用。

    基本上,我认为我只需要在窗口加载之前执行我的python脚本,这样我可靠的烧瓶Web服务器就会启动并为我的localhost:5000应用创建一个nw.js页面界面打开。

    如何打包我的nw.js应用程序,以便它在启动时运行python脚本?

2 个答案:

答案 0 :(得分:3)

您可以在Web服务器启动后创建加载页面并呈现实际应用程序。

的package.json:

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

加载页面(loading.html)将加载一个js文件,该文件将您的实际应用程序页面作为隐藏窗口启动,然后您可以在服务器运行时显示它。

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

无论如何,这是它的要点,但您可能需要对您的特定设置进行更改。希望它有所帮助。

答案 1 :(得分:0)

使用节点的child_process模块,并从index.html调用该模块。

类似的东西:

<!DOCTYPE html>
<html>
  <head>

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

(代码未经过测试,仅供参考)