首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JavaScript或AppleScript多次写入标准数据?

如何使用JavaScript或AppleScript多次写入标准数据?
EN

Stack Overflow用户
提问于 2018-01-11 04:21:13
回答 2查看 1.5K关注 0票数 0

如果我创建一个名为AppleScript的myscript.js脚本并将其传递给oascript,它将只执行一次run函数,并将"hello“写入标准数据:

代码语言:javascript
复制
function run(args) {

  for (var i=0;i<10;i++) {
     // out("number " + i); // execution error: Error on line 18: ReferenceError: Can't find variable: out (-2700)
  }

  return "hello world"; // written to standard data out
}

但是,如果我想多次写入标准数据输出,例如在for循环中,我将如何做到这一点?

如果我执行以下操作,它会多次写入标准错误,并在外部应用程序中分发多个事件:

代码语言:javascript
复制
  for (var i=0;i<10;i++) {
     console.log("number " + i);
  }

唯一的问题是它正在创建错误事件,而不是标准的数据事件。

在“脚本编辑器”中,标准数据输出发送到“结果”窗口。我想要多次打印到结果窗口。

更新:

看来这不可能。我发现了这句这里的话:

问:我的脚本将在很长一段时间内产生输出。当他们进来的时候,我怎么看结果呢? 答:简单的回答是,在命令完成之前,您不做shell脚本不会返回。在Unix术语中,它不能用于创建管道。但是,您可以做的是将命令放到后台(请参阅下一个问题),将其输出发送到文件中,然后在文件填充时读取该文件。

另外,附带说明,如果我想使用JavaScript而不是AppleScript,应该使用cocoascript而不是osascript

EN

回答 2

Stack Overflow用户

发布于 2018-01-11 22:23:25

“还有,我应该用茧标而不是抄本吗?”

TL:如果你爱JavaScript,那你也不喜欢。加油诺德!

长篇版本:

JXA (JavaScript for Automation)是一个错误和半生不熟的系统,几乎没有用户文档、工具、库或社区。负责交付的苹果团队在2016年被正式解散并重新分配/解雇,整个macOS自动化平台陷入了维护模式(而且已经腐烂了!)自10.13以来。经过四分之一世纪的持续忽视、管理不善和混乱之后,无需专家猜测苹果公司遗留下来的、仅限于Mac的自动化技术现在正在走向何方。

CocoaScript works…仅此而已。它是第三方开放源码软件,所以至少它不依赖苹果公司的持续开发和支持,但它从来没有发展到足够大和充满活力的用户社区,使它成为一个受欢迎的成功。快速浏览一下GitHub上的CocoaScript/Mocha项目同样表明,除了必要的维护之外,没有任何正在进行的开发。

这并不是说你不能使用…目前,除非您有一个不可回避的理由这样做,否则现在只有一个JS平台是重要的:Node.js.

与上述不同,Node享有巨大的全球投资、开发、工具、文档、社区和市场增长。(2016年有350万用户,而且还在增长!)完全开放源码和独立。几乎所有重要的操作系统平台都会运行: Windows,Mac,Linux,甚至Android。NPM也是一种非凡的资源:很容易与PyPI,RubyGems,&co在一起。(甚至还有Cocoa和Apple的macOS库,但由于苹果日益混乱的平台中的所有杂乱无章和不确定性,它们现在可能都需要一些TLC。)哦,和大量的工作和自由和开放源码软件项目的机会,如果有一天你希望成为职业。

HTH

附注:要回答您最初的问题,请使用-[NSFileHandle fileHandleWithStandardOutput]获取管道以输出,并按您的意愿多次调用它的-writeData:方法,传递(例如)通过[[NSString stringWithString: aMessage] dataUsingEncoding: NSUTF8StringEncoding]作为参数创建的一个[[NSString stringWithString: aMessage] dataUsingEncoding: NSUTF8StringEncoding]实例。或者,你知道,忽略所有这些,然后去做吧!)

/relurk

票数 2
EN

Stack Overflow用户

发布于 2018-01-27 23:55:45

脚本是计算为最终值的表达式,从JSContext返回给调用方。

如果希望该值由重复行或多行组成,则脚本需要定义和返回该值。

代码语言:javascript
复制
(() => {

    // enumFromToInt :: Int -> Int -> [Int]
    const enumFromToInt = (m, n) =>
        n >= m ? Array.from({
            length: Math.floor(n - m) + 1
        }, (_, i) => m + i) : [];

    // unlines :: [String] -> String
    const unlines = xs => xs.join('\n');

    return unlines(
        enumFromToInt(1, 25)
        .map(n => n.toString() + " hello")
    );
})()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48199694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档