当前位置: 首页 > 知识库问答 >
问题:

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

潘高洁
2023-03-14

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

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,我应该使用CoCoScript而不是osascript吗?

共有2个答案

雷逸仙
2023-03-14

脚本是一个表达式,其计算结果为最终值,从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")
    );
})()
饶元章
2023-03-14

“另外,我应该使用CoCoScript而不是osascript吗?”

TL;DR:如果你喜欢JavaScript,也不要。去节点!

长版本:

JXA(JavaScript for Automation)存在漏洞和半生不熟的问题,几乎没有用户留档、工具、库或社区。负责交付JXA的苹果团队在2016年被正式解散并重新分配/解雇,整个macOS Automation平台自10.13以来一直处于维护模式(并且已经比特罗化了!)。在经历了四分之一个世纪的持续忽视、管理不善和混乱之后,不需要专家就能猜测苹果仅支持Mac的传统自动化技术现在走向何方。

CocoaScript是可行的...仅此而已。它是第三方开源软件,所以至少它不依赖苹果的持续开发和支持,但它从未发展成为一个足够庞大和充满活力的用户社区,使其获得广泛成功。快速浏览GitHub上的CocoaScript/Mocha项目也同样表明,除了必要的维护之外,没有正在进行的开发。

这并不是说你现在不能使用它们,但除非你有一个不可避免的令人信服的理由这样做,否则现在只有一个JS平台很重要:Node。js。

与上述不同,Node拥有巨大的全球投资、开发、工具、文档、社区和市场增长。(2016年有350万用户,而且还在增长!)完全开源和独立。在几乎所有重要的操作系统平台上运行:Windows、Mac、Linux;甚至Android系统。NPM也是一种非凡的资源:在PyPI、RubyGems、,

p、 要回答您最初的问题,请使用-[nsfilehandlefilehandleWithStandardOutput]获取一个到stdout的管道,并调用其-writeData:方法,将(例如)通过[[NSString stringWithString:aMessage]dataUsingEncoding:NSUTF8StringEncoding]创建的NSData实例作为参数传递。或者,你知道,忽略所有这些,然后把它结起来!;)

/雷勒克

 类似资料:
  • 问题内容: 我目前正在编写一个使用BufferedWriter生成多个日志文件的应用程序。但是,在调试时,我想写入System.out而不是文件。我认为我可以从以下方面进行更改: 至: 相对于: 但是,新选项无法正常工作。我如何只更改BufferedWriter构造函数内部的对象,以从文件重定向到标准输出。由于我将要写入多个日志文件,因此实际上无法使用System.out并将输出更改为文件。 问题

  • 问题内容: 我正在向stdin写入大量数据。 我如何确保它不会阻塞? 我读了一个大字符串并将其写入后,似乎无法解决。 我有大量的文件集,这些文件将被顺序写入stdin(> 1k个文件) 所以发生的事情是我正在运行一个循环 它以某种方式挂在文件号上。400.该文件是带有长字符串的大文件。 我确实怀疑这是一个阻碍性问题。 仅当我从0迭代到1000时才会发生这种情况。但是,如果我要从文件400开始,则不

  • 问题内容: 例如,我有一个具有以下内容的文件: 将另一个对象推入此数组以使文件看起来像的JavaScript代码是什么 我要问的原因是我在网上找到了很多有关如何使用AJAX从.json文件中提取数据的信息,但没有使用AJAX将新数据写入.json文件以用其他数据更新.json文件。 任何帮助,将不胜感激! 问题答案: 您必须清楚“ JSON”的含义。 某些人错误地使用术语JSON来指代简单的旧Ja

  • 问题内容: 我知道一次插入多个数据效率更高: 在golang中该怎么做? 使用字符串拼接,但这不是很好。db.Prepare更安全吧? 我需要一个功能更安全,更高效的函数,一次插入多个数据。 问题答案: 为什么不这样呢?(在此处编写但未进行测试,因此可能存在语法错误):

  • 问题内容: 在boto 2中,可以使用以下方法写入S3对象: Key.set_contents_from_string() Key.set_contents_from_file() Key.set_contents_from_filename() Key.set_contents_from_stream() 是否有boto 3等效项?将数据保存到S3上存储的对象的boto3方法是什么? 问题答案:

  • 问题内容: 是否有一种简短的方法可以在Python中连续两次或更多次调用函数?例如: 也许像: 问题答案: 我会: 的是其值为你不关心的变量约定。 您可能还会看到有人写: 但是,这样做会稍微贵一些,因为它会创建一个包含每次调用(即使是)的返回值的列表,然后将结果列表丢弃。我不建议使用,除非你 正在 使用的返回值的列表。