如何在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的原始值,并在完成后重置它。您实际上想完成什么?我想实施评分系统,通过给他们输入测试程序,并检查输出是否匹配。您是什么实际尝试完成?我想实施评分系统,通过给他们输入测试程序,并检查输出是否匹配。你实际尝试完成什么?我想实施评分系统,通过给他们输入测试程序,并检查输出是否匹配。什么你真的想完成吗?我想实施评分系统,通过给他们输入测试程序,检查输出是否匹配。