分叉具有超时和捕获输出的子进程

2023-11-24

假设我有一个如下所示的函数,如何捕获 Process.spawn 调用的输出?如果进程花费的时间超过指定的超时时间,我还应该能够终止该进程。

请注意,该函数还必须是跨平台的(Windows/Linux)。

def execute_with_timeout!(command)
  begin
    pid = Process.spawn(command)     # How do I capture output of this process?
    status = Timeout::timeout(5) {
      Process.wait(pid)
    }
  rescue Timeout::Error
    Process.kill('KILL', pid)
  end
end

Thanks.


您可以使用IO.pipe并告诉Process.spawn使用重定向输出而不需要外部 gem。

当然,只有从Ruby 1.9.2开始(我个人推荐1.9.3)

以下是使用的简单实现菠菜BDD在内部捕获 out 和 err 输出:

# stdout, stderr pipes
rout, wout = IO.pipe
rerr, werr = IO.pipe

pid = Process.spawn(command, :out => wout, :err => werr)
_, status = Process.wait2(pid)

# close write ends so we could read them
wout.close
werr.close

@stdout = rout.readlines.join("\n")
@stderr = rerr.readlines.join("\n")

# dispose the read ends of the pipes
rout.close
rerr.close

@last_exit_status = status.exitstatus

原始来源位于功能/支持/filesystem.rb

强烈建议您阅读 Ruby 自己的进程.spawn文档。

希望这可以帮助。

PS:我把超时实现作为家庭作业留给了你;-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分叉具有超时和捕获输出的子进程 的相关文章

  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • sinatra 应用程序在运行时无法启动

    我使用的是 Ubuntu 10 10 Ruby 1 9 2 无论我做什么 我都无法在本地计算机上启动 sinatra 应用程序 你好 rb require sinatra get do Hello World end ruby hello
  • 如何使用define_method创建类方法?

    如果您尝试以元编程方式创建类方法 这非常有用 def self create methods method name To create instance methods define method method name do end T
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • 用于获取特定用户 ID 和进程数的 Bash 脚本

    我需要 bash 脚本来计算特定用户或所有用户的进程 我们可以输入 0 1 或更多参数 例如 myScript sh root deamon 应该像这样执行 root 92 deamon 8 2 users has total proces
  • 无法启动 Windows 快捷方式

    我正在尝试使用 python 启动 Windows 我已经尝试了 os system subprocess call os startfile 等多种方法 但总是收到错误消息 指出路径不存在 我知道路径是正确的 因为我尝试在 CMD EXE
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • 原子的 C++ 内存屏障

    在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
  • 从 Rails Helper 返回多个标签的最佳方法是什么?

    我想创建一个隐藏字段并在一个助手中创建一个链接 然后将两者输出到我的 erb 应该输出结果 link to something a path form hidden field something tableize value gt som
  • 从轨道控制器返回

    这是一个初学者 Rails 问题 我这样做之后 format xml head ok 如何从控制器端点返回而不显示视图 如果我此时放弃函数的末尾 我会得到我所期望的结果 但如果我调用 返回 我最终会进入视图 或者在我的情况下会出现缺少的视图
  • 匹配一对未转义的平衡分隔符

    如何匹配一对不被反斜杠转义的平衡分隔符 本身不被反斜杠转义 无需考虑嵌套 例如 对于反引号 我尝试了此操作 但是转义的反引号无法按转义的方式工作 regex lt lt hello how are you gt 1 how expected
  • 虚拟USB设备的安装与仿真

    我已经读过创建虚拟USB设备 https stackoverflow com questions 5016363 creating a virtual usb device and 虚拟USB设备 https stackoverflow c
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出
  • 无法在 Powershell 中运行 R.exe

    我经常发现在命令行 Windows 上运行 R 更有用 然而 当我在 Powershell 中尝试时 我往往会遇到问题 但这可以通过第一次运行轻松克服cmd然后就可以了 这是我执行此操作时遇到的错误R CMD BATCH Invoke Hi
  • 使用 Ruby 通过 Outlook 发送消息的最简单方法是什么?

    我的工作要求我为某些测试自动生成电子邮件 我一直在四处寻找 但一直未能找到可以快速实施的合理解决方案 它需要在 Outlook 中 而不是其他邮件服务器中 因为我们有一些奇怪的身份验证规则 并且我们需要保存草稿的选项 而不仅仅是发送消息 显
  • 忽略 GEM,因为它的扩展尚未构建

    在我的工作和家用计算机上 我最近将 Ruby 升级到 2 3 1 使用ruby install I use chruby作为我的 Ruby 切换器 我开始在我的终端中看到这个警告 Ignoring bcrypt 3 1 11 because
  • 获取Windows下新线程/删除线程的通知

    创建 DLL 时 您可以在 DllMain 函数 DLL THREAD ATTACH DLL THREAD DETACH 中获取有关新线程 退出线程的通知 有没有办法在 非托管 可执行文件中从 Windows 获取这些或等效通知 是的 在您
  • Rails:验证字符串的最小和最大长度,但允许其为空白

    我有一个想要验证的字段 我希望该字段能够留空 但如果用户输入数据 我希望它采用某种格式 目前我在模型中使用以下验证 但这不允许用户将其留空 validates length of foo maximum gt 5 validates len
  • 为什么每个方法需要将其循环的值分配给变量?

    在 Rails 上工作 发现我对 Rails 的理解缺乏知识each method 不知道为什么each方法需要变量 message h2 h2 不确定为什么每个方法都需要变量 message 事实并非如此require它 你完全可以忽略它

随机推荐

  • ASP.NET MVC 中基于文档的安全性

    我已经了解 ASP NET MVC 中基于用户和角色的安全性 但现在我需要一些更细粒度的东西 假设我有一个文档列表 其中一些用户已获得授权 另一些则没有 每个文档在数据库的文档表中都有对应的记录 如果用户具有安全访问权限 则可以下载文档以供
  • 如何使用 Vue 命名槽渲染静态内容列表?

    我无法弄清楚如何让以下内容发挥作用 我的家长模板
  • 使用VBA将一定范围的列从文本格式转换为数字格式[重复]

    这个问题在这里已经有答案了 我每周都会收到一份电子表格 由于各种超出我控制范围的原因 某些列以文本形式显示 存储为数字而不是数字 我需要将它们转换为数字 以便稍后在代码中发生与它们相关的事情 我现在正在通过这样做将它们转换为数字 Dim r
  • 如何将 Location 对象放入 Parcelable 中

    我的另一个实现 Parcelable 的 Venue 对象中有一个 Location 对象 如何在 writeToParcel 方法实现中正确序列化它 所以这里有一些代码 public class Venue implements Parc
  • 无法创建组件“reportviewer”。与 2015 年相比,错误消息遵循“system.runtime.interopservices.comexception”

    我尝试重置工具箱并将 microsoft reporting winforms 包更新到 v11 但仍然出现相同的错误 无法创建组件 ReportViewer 错误消息遵循 System Runtime Interopservices CO
  • Spring Security OAuth2 与版本 2.0.+ 中的自定义 TokenGranter

    在 OAuth2 的早期版本中 可以通过将自定义令牌授予者添加到以下位置的 xml 配置中来添加自定义令牌授予者
  • 如何以编程方式播放默认电话铃声?

    我一直在开发与会议相关的应用程序 我想显示来电的铃声通知 我尝试过使用 AVAudioPlayer 它对于自定义声音效果很好 我的问题是 是否可以从 iPhone 获取默认铃声 用户在设置中选择的铃声 并为我的应用程序播放 感谢您的宝贵建议
  • @ConditionalOnProperty 用于多值属性

    有没有办法使用基于多值属性的 ConditionalOnProperty注释 弹簧配置 Bean ConditionalOnProperty name prop havingValue a public SomeBean bean1 ret
  • Java File.list() 顺序一致吗?

    这是一个可怕的问题 在我看来 我尽力为自己找到有用的文档 但运气不佳 无论如何 这里是 我有代码需要对目录中的所有文件执行一些操作 我将目录设置为Fileobject 并使用 fileObject list 迭代目录中的文件 我让这段代码运
  • 将模板类作为参数传递

    如何将模板类传递给另一个类的构造函数 我试图将模板化哈希表类传递给菜单类 这将允许我允许用户决定哈希表的类型 template
  • 实体框架:Database.ExecuteSqlCommand 方法

    因此 我有一个在 MVC 4 应用程序中运行的基本更新语句 我这样称呼它 SQL Server 2008 R2 Entity Framework 5 0 var requestData requestInfo Database Execut
  • Android 小部件在一段时间后停止工作?

    我有一个带有小部件的手电筒应用程序 该小部件用于打开和关闭手电筒 不显示主要活动或任何内容 然而几个小时后 该小部件什么也没做 我的意思是 如果你点击它 什么也不会发生 我有两个classes来完成这个Provider and a Rece
  • 如何实现Fragment之间的水平滚动/滑动?

    我想在我的应用程序中实现类似 Pinterest 或 Trello 的导航 即导航 水平滚动的三个选项卡 我为此制作了一个自定义选项卡栏 因为我无法猜测如何使用导航选项卡模式更改操作栏中的选项卡宽度 所以我有三个按钮可以从一个片段导航到另一
  • Android Studio 2.3 更新导致 Robolectric 单元测试失败

    我所有的单元测试都开始抛出这个错误 No such manifest file build intermediates bundles debug AndroidManifest xml java lang NullPointerExcep
  • 使某些整数的异或为零所需的最小总和

    这是一个涉及算法和按位异或运算的问题 我们被给予x1 x2 x3 xn P 其中星号 运算表示 XOR 按位 运算 并且x1 至 xn 为正整数 P也是正整数 我们需要求最小值 a1 a2 a3 an 这样这个关系成立 gt x1 a1 x
  • 如何在 Excel 中使用 VBA 将附件添加到电子邮件

    我有以下代码 但它不起作用 我对 VBA 也很陌生 该代码可以填充电子邮件模板 但一旦我添加 Attachment Add 它就不起作用 Sub CreateMail Dim objOutlook As Object Dim objMail
  • Pyautogui 在游戏窗口中不起作用

    我正在使用 Pyautogui 对游戏进行一些测试 但在那些改变光标的游戏和全屏游戏中 这些方法都不起作用 我现在正在尝试 仙境传说 Online I tried pyautogui click pyautogui moveTo x y t
  • Visual Studio 在线迁移(VSO 到 VSO)- 不仅仅是代码

    类似的问题Visual Studio 在线迁移 VSO 到 VSO 然而 我们寻求的不仅仅是源代码迁移 我们想要获取一切 代码 工作项目 包括链接 测试计划 测试结果 整个东西 有没有人这样做过 是否可能 或者甚至得到更好的支持 Micro
  • SQL 中的 CHAR 数据类型是否已过时?你什么时候使用它?

    标题几乎概括了问题 我已经很多年没有使用过 CHAR 了 现在 我正在对一个充满 CHAR 的数据库进行逆向工程 用于主键 代码等 CHAR 30 列怎么样 编辑 因此 普遍的观点似乎是 CHAR 对于某些事情来说完全没问题 然而 我认为您
  • 分叉具有超时和捕获输出的子进程

    假设我有一个如下所示的函数 如何捕获 Process spawn 调用的输出 如果进程花费的时间超过指定的超时时间 我还应该能够终止该进程 请注意 该函数还必须是跨平台的 Windows Linux def execute with tim