如果我创建一个名为AppleScript的myscript.js脚本并将其传递给oascript,它将只执行一次run函数,并将"hello“写入标准数据:
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循环中,我将如何做到这一点?
如果我执行以下操作,它会多次写入标准错误,并在外部应用程序中分发多个事件:
for (var i=0;i<10;i++) {
console.log("number " + i);
}唯一的问题是它正在创建错误事件,而不是标准的数据事件。
在“脚本编辑器”中,标准数据输出发送到“结果”窗口。我想要多次打印到结果窗口。

更新:
看来这不可能。我发现了这句这里的话:
问:我的脚本将在很长一段时间内产生输出。当他们进来的时候,我怎么看结果呢? 答:简单的回答是,在命令完成之前,您不做shell脚本不会返回。在Unix术语中,它不能用于创建管道。但是,您可以做的是将命令放到后台(请参阅下一个问题),将其输出发送到文件中,然后在文件填充时读取该文件。
另外,附带说明,如果我想使用JavaScript而不是AppleScript,应该使用cocoascript而不是osascript
发布于 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
发布于 2018-01-27 23:55:45
脚本是计算为最终值的表达式,从JSContext返回给调用方。
如果希望该值由重复行或多行组成,则脚本需要定义和返回该值。
(() => {
// 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")
);
})()https://stackoverflow.com/questions/48199694
复制相似问题