Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ruby中将字符串重定向到stdin_Ruby_Stdin - Fatal编程技术网

如何在ruby中将字符串重定向到stdin

如何在ruby中将字符串重定向到stdin,ruby,stdin,Ruby,Stdin,我需要这样做 10.times do |i| file = File.open("./data/#{i+1}.in") $stdin = file.read load 'sum.rb' file.close end 这是sum.rb gets.chomp.split().map { |e| e.to_i } puts array.inject(:+) 有什么方法可以解决这个问题吗?也许有一种更简单的方法,但如果您不介意将sum.rb作为一个新的过程生成(这将更

我需要这样做

10.times do |i|
    file = File.open("./data/#{i+1}.in")
    $stdin = file.read
    load 'sum.rb'
    file.close
end
这是sum.rb

gets.chomp.split().map { |e| e.to_i }
puts array.inject(:+)

有什么方法可以解决这个问题吗?

也许有一种更简单的方法,但如果您不介意将sum.rb作为一个新的过程生成(这将更好地模拟测试imho),您可以这样做:

require "open3"

10.times do |i|
  File.open("./data/#{i+1}.in") do |file|
    Open3.popen2e("ruby sum.rb") do |stdin, stdout, wait_thr|
      stdin.puts(file.read)
      exit_status = wait_thr.value # Process::Status object returned.
    end
  end
end

Doc:

也许有一种更简单的方法,但如果您不介意将sum.rb作为一个新的流程生成(这将更好地模拟imho测试),您可以这样做:

require "open3"

10.times do |i|
  File.open("./data/#{i+1}.in") do |file|
    Open3.popen2e("ruby sum.rb") do |stdin, stdout, wait_thr|
      stdin.puts(file.read)
      exit_status = wait_thr.value # Process::Status object returned.
    end
  end
end

Doc:

也许有一种更简单的方法,但如果您不介意将sum.rb作为一个新的流程生成(这将更好地模拟imho测试),您可以这样做:

require "open3"

10.times do |i|
  File.open("./data/#{i+1}.in") do |file|
    Open3.popen2e("ruby sum.rb") do |stdin, stdout, wait_thr|
      stdin.puts(file.read)
      exit_status = wait_thr.value # Process::Status object returned.
    end
  end
end

Doc:

也许有一种更简单的方法,但如果您不介意将sum.rb作为一个新的流程生成(这将更好地模拟imho测试),您可以这样做:

require "open3"

10.times do |i|
  File.open("./data/#{i+1}.in") do |file|
    Open3.popen2e("ruby sum.rb") do |stdin, stdout, wait_thr|
      stdin.puts(file.read)
      exit_status = wait_thr.value # Process::Status object returned.
    end
  end
end

Doc:

$stdin
文件的结果。open
都是对象,所以不要分配
文件的结果。读取
$stdin
,分配
文件本身

10.times do |i|
    file = File.open("./data/#{i+1}.in")
    $stdin = file
    load 'sum.rb'
    file.close
end
这将解决您眼前的问题,
sum.rb
无法正常工作(
array
未在任何地方定义)


在更强大的版本中,您可能希望保留
$stdin
的原始值,并在完成后将其重置。

$stdin
文件的结果。open
都是对象,因此不要将
文件的结果分配给
读取
$stdin
,分配
文件
本身

10.times do |i|
    file = File.open("./data/#{i+1}.in")
    $stdin = file
    load 'sum.rb'
    file.close
end
这将解决您眼前的问题,
sum.rb
无法正常工作(
array
未在任何地方定义)


在更强大的版本中,您可能希望保留
$stdin
的原始值,并在完成后将其重置。

$stdin
文件的结果。open
都是对象,因此不要将
文件的结果分配给
读取
$stdin
,分配
文件
本身

10.times do |i|
    file = File.open("./data/#{i+1}.in")
    $stdin = file
    load 'sum.rb'
    file.close
end
这将解决您眼前的问题,
sum.rb
无法正常工作(
array
未在任何地方定义)


在更强大的版本中,您可能希望保留
$stdin
的原始值,并在完成后将其重置。

$stdin
文件的结果。open
都是对象,因此不要将
文件的结果分配给
读取
$stdin
,分配
文件
本身

10.times do |i|
    file = File.open("./data/#{i+1}.in")
    $stdin = file
    load 'sum.rb'
    file.close
end
这将解决您眼前的问题,
sum.rb
无法正常工作(
array
未在任何地方定义)


在一个更强大的版本中,您可能希望保留
$stdin的原始值,并在完成后重置它。

您实际上想完成什么?我想实施评分系统,通过给他们输入测试程序,并检查输出是否匹配。您是什么实际尝试完成?我想实施评分系统,通过给他们输入测试程序,并检查输出是否匹配。你实际尝试完成什么?我想实施评分系统,通过给他们输入测试程序,并检查输出是否匹配。什么你真的想完成吗?我想实施评分系统,通过给他们输入测试程序,检查输出是否匹配。