0

我正在使用 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);
        });

苹果脚本:

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 的输出返回到事件处理程序中?更改以下顺序或注释掉前两个没有帮助。

4

1 回答 1

0

您可以使用节点苹果脚本。
首先用 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);
    });
  }
});

节点苹果脚本文档:https ://github.com/TooTallNate/node-applescript

希望这可以帮助!

于 2017-02-11T19:44:16.213 回答