【发布时间】:2011-05-09 19:42:17
【问题描述】:
这是对this question 的跟进。建议的答案是
将进程输出、错误和输入流复制到系统版本
用IOUtils.copy如下(修复各种编译错误后):
import org.apache.commons.io.IOUtils;
import java.io.IOException;
public class Test {
public static void main(String[] args)
throws IOException, InterruptedException {
final Process process = Runtime.getRuntime().exec("/bin/sh -i");
new Thread(new Runnable() {public void run() {
try {
IOUtils.copy(process.getInputStream(), System.out);
} catch (IOException e) {}
} } ).start();
new Thread(new Runnable() {public void run() {
try {
IOUtils.copy(process.getErrorStream(), System.err);
} catch (IOException e) {}
} } ).start();
new Thread(new Runnable() {public void run() {
try {
IOUtils.copy(System.in, process.getOutputStream());
} catch (IOException e) {}
} } ).start();
process.waitFor();
}
}
但是,生成的代码不适用于执行sh -i 命令的交互式进程。在后一种情况下,任何sh 命令都没有响应。
所以我的问题是:您能否建议一种替代方法来复制适用于交互式流程的流?
【问题讨论】:
标签: java process io stream pipe