当node.js调用applescript application

时间:2017-02-11 19:37:01

标签: node.js applescript nwjs

我正在使用NodeJS执行Applescript应用程序,如下所示:

var child = require('child_process').exec('open myApp.app'); 

        child.on('exit', function (code) {
          console.log('child process exited with code ' + code);
        });
        child.stdout.on('end', function (data) {
          console.log('end: ' + data);
        });
        child.stdout.on('data', function (data) {
          console.log('stdout: ' + data);
        });
        child.stderr.on('data', function (data) {
          console.log('stderr: ' + data);
        });

AppleScript的:

tell application "Final Cut Pro" to activate
tell application "System Events" to keystroke "2" using command down
tell application "System Events"
    tell process "Final Cut Pro"
        tell menu bar 1
            tell menu bar item "File"
                tell menu "File"
                    tell menu item "Export XML..."
                        click
                    end tell
                end tell
            end tell
        end tell
        tell its front window
            click button "Save"
            click button "Replace" of sheet 1
        end tell
    end tell
end tell

节点代码从node-webkit(nwjs)应用程序执行。 Applescript应用程序在ScriptEditor中运行时以及从nwjs应用程序调用时都有效。

我在最后两个事件处理程序中没有得到任何回报。前两个分别输出:

undefined 
0

通过故意编写错误的Applescript代码强制错误不会导致node.js错误事件处理程序中的任何输出。我的问题是:如何从Applescript输出回事件处理程序?更改以下顺序或注释掉前两个顺序无济于事。

1 个答案:

答案 0 :(得分:0)

您可以使用node-applescript。
首先使用npm安装它:$ npm install applescript
然后在你的JS文件中添加下面的代码来运行你的脚本。

var applescript = require('applescript');


var script = 'tell application "iTunes" to get name of selection'; //you can copy and past your apple script here

applescript.execString(script, function(err, rtn) {
  if (err) {
    // Something went wrong!
  }
  if (Array.isArray(rtn)) {
    rtn.forEach(function(songName) {
      console.log(songName);
    });
  }
});

node-applescript docs:https://github.com/TooTallNate/node-applescript

希望这有帮助!