问题标签 [open4]
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 - 带有提示的Ruby open4r多个系统调用
我正在尝试编写一个使用 open4 生成密钥对的小库,这是处理具有多个提示的系统调用的最佳方式吗?
ruby - 使用 Ruby 向 Web 公开控制台应用程序
我希望通过 JSON 或其他使用 Ruby 的 RPC 样式服务公开一个交互式命令行程序。我找到了一些技巧来做到这一点,但是在重定向输出和输入时我遗漏了一些东西。
至少在 linux 上的一种方法是将标准输入和标准输出重定向到一个文件,然后与文件读取和写入异步读取和写入该文件。我在谷歌搜索后尝试的另一种方法是使用 open4。这是我到目前为止编写的代码,但是在从标准输出中读取了几行代码后它就卡住了。
对此的任何帮助或一些见解将不胜感激!
ruby - 为什么程序等待stdin时open4不能从stdout读取?
我正在使用open4
gem 并且在从生成的进程标准输出中读取时遇到问题。我有一个红宝石程序,test1.rb
:
以及同一目录中的另一个 ruby 程序test2.rb
:
当我运行第二个程序时:
它只是永远坐在那里而不打印任何东西。为什么会发生这种情况,我能做些什么来阻止它?
ruby - 在Ruby中将所有替换转换为concats的基于字符串的类?
我正在使用 open4::background 在 shell 上打开一个进程。open4::background 允许我使用任何实现 <<、each、read 或 to_s 的类作为 stdx 的句柄。
我目前正在使用字符串,但每次在标准输出上发生写入时,它都会替换旧值。考虑到接受任何实现某些类似字符串的函数的类,是否有一个简单的类可以用来进行新的写入追加而不是替换?
我是 Ruby 的新手,我只是希望将这部分插入。如果有人可以为此贡献或指向一个简单的现有类,我将不胜感激。
这里有一个线程用示例实现来解释这一点:http ://www.ruby-forum.com/topic/151316但我认为这对于我现在想要做的事情来说有点太复杂了。作为一名 Ruby n00b,如果有人能为我按摩那个样品,我会感觉更舒服。
谢谢。
编辑:
根据 Phrogz 的要求,这是我想要做的:
ruby - 在调用 Ruby 模块函数时设置选项
考虑 Ruby 的 open4 中的这个片段:
现在假设我想在从使用 gem 的代码中调用此函数时使 ignore_exit_failure == true 。我该怎么做?
编辑:我想我刚刚假设 getopts 是一个标准的 Ruby 模块,用于传递选项。这是根据 Alex Kliuchnikau 的评论对 getopts 的定义:
对于已经熟悉该open4
模块的人来说,这可能只是一个问题。
ruby - 如何让 Open4 以交互方式捕获所有标准输出?
我正在尝试在 Ruby 脚本中执行 shell 命令。有问题的 shell 命令 ( pg_dump
) 提示用户输入密码。我想做的是在子进程中执行 shell 命令,并让我的父进程以交互方式输入密码。
我希望所有人都stdout
被stderr
父进程捕获,这样它就不会显示给用户。
这是一些代码。它应该证明的是 Open4 能够stdout
从 shell 命令中捕获。不幸的是,它没有这样做。
这是输出。请注意,它会打印“密码:”,尽管 Open4 传递了一个用于stdout
.
我错过了什么?谢谢你的帮助。
ruby - Ruby gems 在 OSX 上安装与运行时路径
gem 安装路径和使用的 Rakefile 路径之间的不匹配在哪里?
我最初想在我的 Mac OS X Mountain Lion 10.8.4 上运行 Rakefile。这在丢失的“open4”包上失败了。
我没有使用 ruby 的经验,也没有使用 Mac 的经验,但我搜索了 open4 并发现:
那也失败了,但是使用 sudo 成功了。
它仍然没有工作,我的结论是安装路径:
与我从脚本中转储的运行时包含路径不同:
更多的谷歌搜索让我了解了 stackoverflow的理解-rubys-load-paths等等。他们似乎都认为解决方案是RVM(与 RVM 的链接已损坏)
我安装了那个:
但是 RVM 使用的路径也好不到哪里去:
一个非常古老的问题 - gem-path-used-by-rake-different-than-system-path-on-os-x似乎涵盖了我想知道的内容,但该解决方案似乎与当前的 OSX 无关
安装和使用路径之间的不匹配在哪里?
ruby - 如何将终止信号转发给 Open4 子进程
我正在使用open4
gem 将系统调用包装到可能长时间运行的第三方命令行工具。该工具有时可能会失败,使两个进程保持忙碌,并部分阻塞管道,因为父进程是工作脚本池的一部分(服务于 Beanstalk 队列)。从系统外部,我可以根据正在处理的数据模型以编程方式识别卡住的工作脚本及其进程 ID。在Open4.open4
块内,我可以识别子进程 ID。
我想设置Open4
块,以便当我向父工作进程发送 SIGTERM 时,它会在 SIGTERM 上转发给子进程。另外,如果子进程在短暂等待后仍然未能退出,我想向子进程发送 SIGKILL。在这两种情况下,我都希望父进程正常响应它发送的 SIGTERM。
这一切都已完成,因此我可以在客户服务应用程序中显示“停止”按钮,这样非技术团队成员就有了一个工具来管理他们摆脱队列阻塞的情况。
我在 SO 中发现了一些相关问题 - 例如如何在父进程退出后使子进程死亡?- 但从 Ruby 应用程序代码中,答案对我来说并不是真正有用的。
这是我在 Mac 上测试过的 Ruby 中的当前实现:
测试不会总是响应 SIGTERM 的“坏”进程的替身:
测试 Open4 块(“worker”测试脚本的一部分):
如果我启动它并运行例如典型输出kill -15 16854
:
同一测试的日志文件内容:
该代码在 IMO 有点笨拙,尽管它似乎可以按我的意愿工作。我的问题:
- 上述尝试是否可行,或者在我需要它的用例中存在致命缺陷?
- 我是否错过了使用现有
Open4
和核心 Ruby 方法做同样事情的更简洁的方法?
ruby - 使用 Ruby 1.8.7,我可以执行 shell 并捕获 PID、STDOUT、STDERR、状态吗?
我正在尝试运行 shell 脚本并捕获 PID、STDERR、STDOUT 和 shell 的退出状态。
我使用的是 Ruby 1.8.7,所以 Open3 没有办法获取 PID。我尝试使用 open4 gem,但不幸的是在写入过程中挂起了一些脚本,手动运行时运行良好。
我想找到一个替代方案。您的指导将不胜感激!
ruby-on-rails - 为什么它在 localhost 上弹出错误 Marshal 数据太短?
我的应用程序允许在 localhost 上运行 shell 命令,我已经在模型中编写了逻辑:
当我尝试运行它时出现错误localhost
:
在此处输入代码 Commands#index 中的参数错误 Showing /home/mifi/bash/app/views/commands/index.html.erb where line #12: marshal data too short
无论如何,我可以在命令行上运行 shell 脚本,或者如何在浏览器上提取输出。