像维基百科一样连续输入
Continuous input as in wikipedia
所以我正在学习 ruby 并想从维基百科中删除。
require "rubygems"
require "json"
require 'restclient'
require 'crack'
require 'io/console'
parse = ""
5.times{
inp = STDIN.getch
parse += inp
url="http://en.wikipedia.org/w/api.php?action=opensearch&search=#{parse}&namespace=0"
data= Crack::JSON.parse(RestClient.get(url))
puts data[1]
}
因此,我编写的这段代码从用户连接输入并抓取 wiki 搜索解析 JSON 的输出中获取了 5 次输入。但我希望输入是连续的,而不是用户点击一个字符等待输出并再次点击下一个字符。相反,我希望它在不按 enter 的情况下输入几个字符 ,如果有暂停,比如 1 秒或更长时间,它应该开始抓取并给出输出。
背后的一个主要原因是允许用户擦除他写的一些文本或添加更多字母和脚本以再次跟随输入字段中留下的任何内容而无需按回车键 即使它在初始暂停后显示了输出。
基本上我希望它就像 wiki 本身一样。随时可以进入搜索团队修改,随时有新的输出等待。
编辑:
require "rubygems"
require "json"
require 'restclient'
require 'crack'
require 'io/console'
parse=""
ch=""
t2 =Thread.new do
loop do
temp=STDIN.getch
parse+=temp
end
end
t=Thread.new do
loop do
if parse!=ch
sleep 1
url="http://en.wikipedia.org/w/api.php?action=opensearch&search=#{parse}&namespace=0"
data = Crack::JSON.parse(RestClient.get(url))
#puts parse
puts data[1]
ch=parse
end
end
end
t.join
t2.join
这非常有效,但我如何在用户按下回车键时结束线程。
getch
实际上需要两个(记录不详的)关键字参数,它们完全符合您的要求
# wait for 0 characters, timeout after 2 seconds
char = STDIN.getch min:0, time:2
如果用户在两秒内没有按任何键,char
将是nil
。您可以在循环中调用它,并将该结果用作启动抓取的触发器。
require "rubygems"
require "json"
require 'restclient'
require 'crack'
require 'io/console'
parse=""
ch=""
done=false
t2 =Thread.new do
loop do
temp=STDIN.getch
if temp=="\n"
done=true
break
end
parse+=temp
end
end
t=Thread.new do
loop do
if done==true
break
end
if parse!=ch
sleep 1
url="http://en.wikipedia.org/w/api.php?action=opensearch&search=#{parse}&namespace=0"
data = Crack::JSON.parse(RestClient.get(url))
#puts parse
puts data[1]
ch=parse
end
end
end
t.join
t2.join
puts "Thanks!"
gets
使用.chomp
,然后它不仅会读取\n
,还会读取空格。也只需要 1 个线程,而不是 2 个。
require "json"
require 'restclient'
require 'crack'
require 'io/console'
parse=""
ch=""
done=false
t2 =Thread.new do
loop do
temp=STDIN.getch.chomp
if temp==""
done=true
break
end
parse+=temp
end
end
while !done
if parse!=ch
sleep 1
url="http://en.wikipedia.org/w/api.php?action=opensearch&search=#{parse}&namespace=0"
data = Crack::JSON.parse(RestClient.get(url))
puts data[1]
ch=parse
end
end
t2.join
所以我正在学习 ruby 并想从维基百科中删除。
require "rubygems"
require "json"
require 'restclient'
require 'crack'
require 'io/console'
parse = ""
5.times{
inp = STDIN.getch
parse += inp
url="http://en.wikipedia.org/w/api.php?action=opensearch&search=#{parse}&namespace=0"
data= Crack::JSON.parse(RestClient.get(url))
puts data[1]
}
因此,我编写的这段代码从用户连接输入并抓取 wiki 搜索解析 JSON 的输出中获取了 5 次输入。但我希望输入是连续的,而不是用户点击一个字符等待输出并再次点击下一个字符。相反,我希望它在不按 enter 的情况下输入几个字符 ,如果有暂停,比如 1 秒或更长时间,它应该开始抓取并给出输出。
背后的一个主要原因是允许用户擦除他写的一些文本或添加更多字母和脚本以再次跟随输入字段中留下的任何内容而无需按回车键 即使它在初始暂停后显示了输出。
基本上我希望它就像 wiki 本身一样。随时可以进入搜索团队修改,随时有新的输出等待。
编辑:
require "rubygems"
require "json"
require 'restclient'
require 'crack'
require 'io/console'
parse=""
ch=""
t2 =Thread.new do
loop do
temp=STDIN.getch
parse+=temp
end
end
t=Thread.new do
loop do
if parse!=ch
sleep 1
url="http://en.wikipedia.org/w/api.php?action=opensearch&search=#{parse}&namespace=0"
data = Crack::JSON.parse(RestClient.get(url))
#puts parse
puts data[1]
ch=parse
end
end
end
t.join
t2.join
这非常有效,但我如何在用户按下回车键时结束线程。
getch
实际上需要两个(记录不详的)关键字参数,它们完全符合您的要求
# wait for 0 characters, timeout after 2 seconds
char = STDIN.getch min:0, time:2
如果用户在两秒内没有按任何键,char
将是nil
。您可以在循环中调用它,并将该结果用作启动抓取的触发器。
require "rubygems"
require "json"
require 'restclient'
require 'crack'
require 'io/console'
parse=""
ch=""
done=false
t2 =Thread.new do
loop do
temp=STDIN.getch
if temp=="\n"
done=true
break
end
parse+=temp
end
end
t=Thread.new do
loop do
if done==true
break
end
if parse!=ch
sleep 1
url="http://en.wikipedia.org/w/api.php?action=opensearch&search=#{parse}&namespace=0"
data = Crack::JSON.parse(RestClient.get(url))
#puts parse
puts data[1]
ch=parse
end
end
end
t.join
t2.join
puts "Thanks!"
gets
使用.chomp
,然后它不仅会读取\n
,还会读取空格。也只需要 1 个线程,而不是 2 个。
require "json"
require 'restclient'
require 'crack'
require 'io/console'
parse=""
ch=""
done=false
t2 =Thread.new do
loop do
temp=STDIN.getch.chomp
if temp==""
done=true
break
end
parse+=temp
end
end
while !done
if parse!=ch
sleep 1
url="http://en.wikipedia.org/w/api.php?action=opensearch&search=#{parse}&namespace=0"
data = Crack::JSON.parse(RestClient.get(url))
puts data[1]
ch=parse
end
end
t2.join