实现Ruby的IO.popen()和system()的替换

Jes*_*erE 12 ruby

Ruby中的IO.popen()和system()非常缺乏一些有用的功能,例如:

  • 获取函数的返回值
  • 捕获stdout和stderr(单独和合并)
  • 在没有产生额外的cmd.exe或/ bin/sh进程的情况下运行

Python有一个模块"subprocess",我正在考虑将其用作Ruby中类似模块的灵感.现在问题:

  • Ruby程序员如何解决上述问题,例如在执行popen()调用时获取返回值?
  • 这是否已经实施了?

Pri*_*iit 9

  • system()退出状态可以捕获 $?.exitstatus
  • stderr可以用类似的东西捕获 system 'command 2>&1'


Aar*_*nni 9

看一下标准的Ruby库open3.这将使您可以访问stdin,stdout和stderr.

还有一个名为open4的外部项目,它允许您在不使用魔术变量名的情况下获取退出状态.