如何使用java.lang.Process类为另一个进程提供输入
问题描述:
假设有一个程序从标准输入接收输入。如何使用java.lang.Process类为另一个进程提供输入
例如:
cin>>id;
我想要什么弄清楚是如何执行的过程,并给予一定的投入到它的标准输入。获得流程的输出对我来说不是问题。它正常工作。问题是如何使用java.lang.Process
类为此类流程提供输入。
如果还有任何其他第三方库像Apache共享请提及它们。
在此先感谢!
答
您需要启动一个单独的线程,该线程从一个进程的输出读取并将其作为输入写入另一个进程。
像这样的东西应该做的:
class DataForwarder extends Thread {
OutputStream out;
InputStream in;
public DataForwarder(InputStream in, OutputStream out) {
this.out = out;
this.in = in;
}
@Override
public void run() {
byte[] buf = new byte[1024];
System.out.println("Hej");
try {
int n;
while (-1 != (n = in.read(buf)))
out.write(buf, 0, n);
out.close();
} catch (IOException e) {
// Handle in some suitable way.
}
}
}
这将被用于prod >> cons
如下:
class Test {
public static void main(String[] args) throws IOException {
Process prod = new ProcessBuilder("ls").start();
Process cons = new ProcessBuilder("cat").start();
// Start feeding cons with output from prod.
new DataForwarder(prod.getInputStream(), cons.getOutputStream()).start();
}
}
答
使用Process.getOutputStream()
和write()
它。这是一个有点棘手,因为你使用输出流到输入输入数据的过程,但名称反映返回的接口(从您的应用程序的角度来看它是输出,因为你正在写它)。