2011-01-19 26 views
2

我已经成功地让ProcessBuilder运行外部脚本,但是我仍然需要让Java与外部脚本进行通信。我想我应该从流程中获取输入/输出流,并使用它们来发送和接收数据。给脚本提供输入时我遇到了最大的麻烦。看起来,我可以通过使用脚本的打印功能从脚本获得输出,但似乎无法让脚本注册来自主java程序的输入。让Java与Python,C,C++和Ruby交谈

这个问题涉及四种语言,所以如果您只发布关于一种语言的答案,那很好。

回答

2

方法的getOutputStream()中的任意2之间的通信Process类返回一个可以写入到Java中的流,该流连接到流程的stdin流。你应该能够阅读这个,因为你通常会阅读每种语言的标准输入(例如,cin为C++,scanf为C,STDIN.read为Ruby,不知道Python!)

如果这是你的“重新做,它不工作(你的问题听起来像它可能是,但很难说)你可以发布一些代码,以便更容易地看到你可能做错了什么吗?

+0

感谢您使用C++,C和Ruby的命令!我让Python通过raw_input工作 – Curlystraw 2011-01-19 17:36:53

0

至于让Java与Python交谈,你有没有考虑过Jython

关于C和C++,标准的想法是使用Java Native Interface。一旦您可以与C/C++交谈,就可以使用C/C++与其他任何语言交流,包括Python和Ruby。

1

您应该使用标准的进程间机制,如管道或套接字。

所有这些语言都具有可用于这两个库,而这个策略让你的进程(Java /红宝石,红宝石/ Python和Java的/ C等)