我正在通过 capture3 在 Ruby 脚本中运行Amazon 的 Kindle Previewer工具。Kindle Previewer 命令验证 epub 文件并将日志打印到指定文件夹,同时还在终端运行时打印日志。我不希望任何这些消息出现在终端中。命令本身的语法是kindlepreviewer [epub file] -log -output [log output folder]
. 在我的 capture3 语句中,它看起来像这样:
stdout, stderr, status = Open3.capture3("kindlepreviewer #{epub_file} -log -output #{output_folder}")
这在 Mac 和 PC 上都能成功执行,我可以在脚本的其他地方使用输出。在 Mac 上,终端窗口会抑制命令运行时生成的输出,这正是我想要的。我的问题是,在 Windows 中,所有输出仍然来自命令提示符。我不知道如何关闭它。基于类似的问题,例如:Suppressing the output of a command run using 'system' method while running it in a ruby script,我尝试了类似的方法:
stdout, stderr, status = Open3.capture3("#{cmd} #{epub} -log -output #{@kindle_folder} > /dev/null 2>&1")
这根本没有效果。正常执行,所有输出仍出现在命令提示符中。
我知道 Kindle Previewer 是一个非常具体的工具,可以在这里引用,但我似乎找不到更通用的答案来解释为什么在 Mac 上运行 capture3 命令会抑制终端中的输出,但在 Windows 命令提示符中运行它将不会。有没有不同的方式我应该在 PC 上的 Ruby 中运行 shell 命令,同时仍然能够将命令的输出存储在脚本中?