通过ruby PTY与Julia沟通

时间:2014-06-01 03:51:40

标签: ruby julia pty

我试图基本上通过stdin将命令发送到julia会话。任何人都可以给我一些指示,说明为什么这段代码似乎永远不会在朱莉娅那边执行任何事情?似乎命令被传递给julia,但从未实际运行,或者julia从未将它的输出传递给输出流......我希望最终在输出流中看到4(结果为2 + 2)。有什么想法吗?

require 'pty'
require 'expect'

class Session
    def initialize            
        @output, @input, @pid = PTY.spawn('julia -q')
    end

    def exec(cmd)
        @input.write(cmd + "\n")      
        @output.each { |line| print line }
    end
end

session = Session.new()
session.exec("2 + 2")

1 个答案:

答案 0 :(得分:2)

好的,我想我弄明白了发生了什么:

  1. 你需要给julia一些时间来启动。

  2. 你需要发送一个带有\ n的\ r来告诉julia读取该行。

  3. 这对我有用:

    require 'pty'
    require 'expect'
    
    class Session
        def initialize
            @output, @input, @pid = PTY.spawn('julia -q')
            sleep 5
            # @output.expect(/julia\>/)  would be nicer!
        end
    
        def exec(cmd)
            @input.write(cmd + "\r\n"   # This is control-m 
            @output.each { |line| print line }
        end
    end
    
    session = Session.new()
    session.exec("2 + 2")
    

    注意:

    而不是笨拙的睡眠5我认为@output.expect("julia\>")会更好。但睡眠证明了它失败的原因。