从ruby(rails)调用python外壳应用程序

从ruby(rails)调用python外壳应用程序,python,ruby,Python,Ruby,如何从ruby调用在shell中运行的python。实际上,我需要ruby与一些在python下运行的应用程序进行通信。因此,我需要ruby在cmd中调用python(命令“python”),然后在python环境下导入库(命令“import xyz”),并运行这些导入库的函数(例如“xyz.showdate()”),当然还需要得到结果 我试图使用IO.popen和Open3.popen3函数来实现这一点,但我做了一些错误的事情 实际上,我在rails上使用jruby,但我想它应该与ruby相同

如何从ruby调用在shell中运行的python。实际上,我需要ruby与一些在python下运行的应用程序进行通信。因此,我需要ruby在cmd中调用python(命令“python”),然后在python环境下导入库(命令“import xyz”),并运行这些导入库的函数(例如“xyz.showdate()”),当然还需要得到结果

我试图使用IO.popen和Open3.popen3函数来实现这一点,但我做了一些错误的事情


实际上,我在rails上使用jruby,但我想它应该与ruby相同。

您可能并不真的想这样做,这会使您的ruby脚本过于复杂,而您可能直接在ruby中获得结果

但是,如果您决定这样做,您可以创建一个python脚本来完成您需要的任务,并从ruby脚本运行它:

# python-script.py 
import xyz
if __name__ == '__main__':
    xyz.showdate()
然后进行安排,以便ruby脚本调用以下命令:

python path/to/python-script.py
如果您的
xyz.showdate
打印了日期,您可以收集标准输出以获得结果


但是,这可能不是一个好主意。

那么,有没有其他方法可以在ruby和python shell之间建立通信?如果我考虑长期使用,XML-RPC如何?是否由于客户机-服务器体系结构的原因而变慢?可能会变慢,但肯定不会变慢。另外,使用运行xml rpc服务器的python守护进程将节省解释器/应用程序启动开销,如果要加载大量的应用程序,这可能会成为一个问题。另外,它的设计显然更理智。嗯。。。python库在Jython下工作吗?然后,您可以像调用Java类一样调用它,从而避免了在每次调用时进行本机剥离和运行另一个解释器的开销。