在一个线程中,我正在执行以下操作:
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
当我尝试访问thread_var["output"]
时,它的值为nil,就像下面的代码io_object = IO.popen(command)
没有被执行一样。在第一种情况下,我在dest
文件夹到达线程之前创建了它。在第二种情况下,我在线程中创建了它。我怎么能找出问题所在呢?我是Ruby线程的初学者。
编辑
在该线程内执行的命令可能需要很长时间才能完成。同时,我希望能够访问thread_var["output"]
变量并查看命令的执行情况。如果我在访问值之前加入线程,一切正常。然而,加入线程可能需要很长时间,我不想这样做。有没有办法解决这个问题?
1条答案
按热度按时间5gfr0r5j1#
有可能是一个异常被引发了。除了主线程之外的其他线程中的异常不会被打印到控制台--它们只是导致线程停止运行。