在一个线程中,我正在执行以下操作:
builder_thread = Thread.new do
FileUtils.cp_r(folder,dest)
io_object = IO.popen(command)
Thread.current["output"] = ""
Thread.current["pid"] = io_object.pid
Thread.current["basedir"] = dest
io_object.each { |out| Thread.current["output"] += out }
end
当我访问线程的输出时
thread_var["output"]
. 但是,如果我将代码转换为:
builder_thread = Thread.new do
dest = File.join(root_dir,"mydir")
FileUtils.cp_r(folder,dest)
io_object = IO.popen(command)
Thread.current["output"] = ""
Thread.current["pid"] = io_object.pid
Thread.current["basedir"] = dest
io_object.each { |out| Thread.current["output"] += out }
end
当我试图接近
线程变量[“输出”]
是零,就像下面的代码
io_object = IO.popen(command)
不会被处决。在第一种情况下,我正在创建
dest
在它到达线程之前文件夹。第二步,我在线程中创建它。你能帮我弄清楚怎么回事吗?
编辑:在该线程内执行的命令可能需要很长时间才能完成。同时,我希望能够访问
线程变量[“输出”]
变量查看命令的工作方式。如果在访问该值之前加入线程,则一切正常。但是,连接线程可能需要很长时间,我不喜欢这样做。有办法解决这个问题吗?