我试图基本上通过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")
答案 0 :(得分:2)
好的,我想我弄明白了发生了什么:
你需要给julia一些时间来启动。
你需要发送一个带有\ n的\ r来告诉julia读取该行。
这对我有用:
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\>")
会更好。但睡眠证明了它失败的原因。