问题标签 [popen3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - 在 capture3 中运行 shell 命令时抑制命令提示符输出
我正在通过 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 命令,同时仍然能够将命令的输出存储在脚本中?
ruby - Ruby:popen 与 popen3 的异常
我想知道如何从Open3.popen3
Ruby 上捕获异常。
问题是二进制可执行文件的体系结构错误,不能在本地机器上运行。当从命令行调用时,像这样./somebinary
,您会看到错误消息。
使用popen
时,救援子句会捕获错误,但使用 时不会popen3
。
如果rescue
子句没有StandardError => e
,则输入子句,但您无法知道错误的原因,因为您看到的只是来自 的消息“错误” $stderr.puts "error"
。使用popen3
,命令行中的 stderr 消失了!
我在 macOS 11.3.1 上使用 ruby 3.0.1p64 。
一个完整的例子
ruby - 使用 Open3.popen3 时如何在每次输入后从标准输出读取数据?
在下面的代码中,我想从stdout
每个标准输入之后读取数据。我的下一个输入取决于我在最后一个输出中得到什么。我想调用updateParameters()
函数来更新nextstate
将用于下一个输入的函数。但目前我只有在输入过程完成后才能得到输出。因此nextState
没有得到更新,我得到了错误的输出。
我知道目前所有数据都由 ruby 存储在缓冲区中,并且在接收到所有输入后返回整个输出。
但是有没有办法在每个输入命令之后在这里读取输出?
ruby-on-rails - Ruby 使用 open3 防止命令注入
在我正在处理的一个项目中,我们使用 backtip 方法来运行系统命令。
效果很好。但由于它可能导致命令注入漏洞,我们计划使用exec
或open3
. 我们在open3
执行系统命令时面临问题。我们将其用于解决命令注入。
但这会导致以下错误
当我包含这样的参数时,这有效。
但是我们不应该单独传递参数以避免命令注入吗?还是我对第一个版本做错了什么?
ruby - 将映射写入 csv 文件失败 - 使用 Open3 的红宝石
我正在尝试使用 Open3 将地图内容写入 csv 文件。这是正在使用的代码
地图创建逻辑如下
是否可以将地图对象写入 csv 文件?这里有什么错误。我没有任何红宝石的基础知识。期待快速重播
注意:我可以将字符串内容写入 csv