gpt4 book ai didi

python - 在 Ruby 进程中嵌入 Python CLI?

转载 作者:数据小太阳 更新时间:2023-10-29 07:18:01 26 4
gpt4 key购买 nike

作为一个更大项目的一部分,我正在尝试将 Python 交互式解释器“嵌入”到 Ruby 进程中。我希望能够执行以下操作:

$ irb
irb(main):001:0> pipe = IO.popen("python", "w+")
=> #<IO:0x7f3dba4977e0>
irb(main):002:0> pipe.puts "print 'hello'"
=> nil
irb(main):003:0> pipe.gets
=> 'hello\n'

不幸的是,gets 似乎挂起而不是从 Python 进程返回任何类型的输出。我已经尝试使用 open3 改变这个过程,使用模式 r+ 而不是 w+,还有一些其他的小选项(python -u 其中),但没有成功。

有没有一种方法可以通过 Ruby 与 Python shell 建立交互式通信——实际上是“包装”Python CLI?我在 x86_64 机器上使用 Ruby 1.8.7(2010-06-23 补丁级别 299)和 Python 2.6.6,但希望解决方案可以跨 Python 版本移植。

最佳答案

这是使用 Ruby 的伪终端库的替代方法。我已经在 Linux 和 MacOS X 上用 ruby​​ 1.9 测试过它,它可能无法在 Windows 上运行:

require 'pty'

begin
# stty -echo turns off terminal echo, without it tty input would be repeated
# on output
PTY.spawn( "stty -echo; python" ) do |r, w, pid|
begin

cmd = nil
begin
w.puts cmd if cmd != nil

# non-blocking read of stdout with 2 seconds timeout
while IO.select([r], nil, nil, 2)
print r.getc
end

end while cmd = gets

rescue Errno::EIO
puts "end of output"
end
end
rescue PTY::ChildExited => e
puts "The child process exited."
end

关于python - 在 Ruby 进程中嵌入 Python CLI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7001064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com