在Windows中读写子进程的popen等效项是什么?

时间:2020-03-06 14:36:34  来源:igfitidea点击:

Ruby的标准popen3模块在Windows上不起作用。是否有可维护的替代品,以允许分离stdin,stdout和stderr?

解决方案

POpen4 gem在UNIX和Windows之间具有公共接口。以下示例(来自其网站)像一个超级按钮一样工作。

require 'rubygems'
require 'popen4'

status =
  POpen4::popen4("cmd") do |stdout, stderr, stdin, pid|
    stdin.puts "echo hello world!"
    stdin.puts "echo ERROR! 1>&2"
    stdin.puts "exit"
    stdin.close

    puts "pid        : #{ pid }"
    puts "stdout     : #{ stdout.read.strip }"
    puts "stderr     : #{ stderr.read.strip }"
  end

puts "status     : #{ status.inspect }"
puts "exitstatus : #{ status.exitstatus }"

popen3在Windows上与MRI 1.9.x兼容。参见http://en.wikibooks.org/wiki/Ruby_Programming/Running_Multiple_Processes