代码之家  ›  专栏  ›  技术社区  ›  Geo

红宝石线新手,出了点问题。你能帮我找出是什么吗?

  •  1
  • Geo  · 技术社区  · 15 年前

    在一个线程中,我正在执行以下操作:

    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 在它到达线程之前文件夹。第二步,我在线程中创建它。你能帮我弄清楚怎么回事吗?

    编辑:在该线程内执行的命令可能需要很长时间才能完成。同时,我希望能够访问 线程变量[“输出”] 变量查看命令的工作方式。如果在访问该值之前加入线程,则一切正常。但是,连接线程可能需要很长时间,我不喜欢这样做。有办法解决这个问题吗?

    1 回复  |  直到 15 年前
        1
  •  4
  •   Nick    15 年前

    有可能引发了异常。主线程以外的线程中的异常不会打印到控制台-它们只会导致线程停止运行。