我找到了一些代码,可以通过系统调用从Ruby运行Applescript:
system 'osascript', *script.split(/\n/).map { |line| ['-e', line] }.flatten
它的效果很好,但这并不是我真正需要的。
我想修改系统调用,以便忽略标准输出。
我先添加1>/dev/null
参数:
system 'osascript', *script.split(/\n/).map { |line| ['-e', line] }.flatten, "1>/dev/null"
这没有用,因为第三个参数似乎被忽略了。
然后,我删除了参数化调用并使用了字符串插值:
system "osascript #{*script.split(/\n/).map { |line| ['-e', line] }.flatten} 1>/dev/null"
产生语法错误。
然后,我尝试了各种尝试来移动内容,这主要产生了其他语法错误。
在这种情况下忽略系统输出的正确语法是什么?
如果从切换到Kernel#system
,这会更容易Open3
。Open3中的方法使您可以方便地控制stdin,stdout和stderr,而不必弄乱它们,甚至可以osascript
通过stdin来输入脚本,而不必将其拆分和使用多个-e
开关。
大概是这样的:
out, error, status = Open3.capture3('osascript', stdin_data: script)
如果要忽略stdout和stderr,请使用占位符变量:
_, _, status = Open3.capture3('osascript', stdin_data: script)
*_, status = Open3.capture3('osascript', stdin_data: script)
如果您不关心stdout,stderr或状态,请执行以下操作:
Open3.capture3('osascript', stdin_data: script)
但是您的良心应该告诉您至少检查一下状态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句