【发布时间】:2011-01-19 14:56:17
【问题描述】:
我已经成功让 ProcessBuilder 运行外部脚本,但我仍然需要让 Java 与外部脚本通信。我认为我应该从流程中获取输入/输出流,并使用它们来发送和接收数据。我在为脚本提供输入时遇到了最大的麻烦。似乎我可以通过使用脚本的打印功能从脚本中获取输出,但我似乎无法让脚本注册来自主 java 程序的输入。
这个问题涉及四种语言,所以如果你只发布关于一种语言的答案就可以了。
【问题讨论】:
我已经成功让 ProcessBuilder 运行外部脚本,但我仍然需要让 Java 与外部脚本通信。我认为我应该从流程中获取输入/输出流,并使用它们来发送和接收数据。我在为脚本提供输入时遇到了最大的麻烦。似乎我可以通过使用脚本的打印功能从脚本中获取输出,但我似乎无法让脚本注册来自主 java 程序的输入。
这个问题涉及四种语言,所以如果你只发布关于一种语言的答案就可以了。
【问题讨论】:
Process 类的 getOutputStream() 方法返回一个您可以在 Java 中写入的流,该流连接到进程的标准输入流。您应该能够像通常阅读每种语言的标准输入一样阅读此内容(例如,cin 代表 C++,scanf 代表 C,STDIN.read 代表 Ruby,不懂 Python!)
如果这是您正在做的事情并且它不起作用(您的问题听起来可能是,但很难说)您能否发布一些代码以便更容易地查看您可能做错了什么?
【讨论】:
您可能应该使用标准的进程间机制,例如管道或套接字。
所有这些语言都有可用于这两种语言的库,并且此策略允许在您的任意 2 个进程(Java/Ruby、Ruby/Python、Java/C 等)之间进行通信
【讨论】:
在让 Java 与 Python 对话方面,您是否考虑过 Jython?
关于 C 和 C++,标准的想法是使用 Java Native Interface。一旦您可以与 C/C++ 对话,您就可以使用 C/C++ 与几乎任何其他语言对话,包括 Python 和 Ruby。
【讨论】: