Trong các ngôn ngữ khác (như bash và Python), khi chúng ta sinh ra một tiến trình con, quá trình mới này sẽ kế thừa giá trị stdout và stderr từ cha mẹ. Điều này có nghĩa là bất kỳ đầu ra nào từ quá trình con sẽ được in tới thiết bị đầu cuối cũng như đầu ra từ cha mẹ.Làm thế nào để chuyển hướng quá trình con stdout/stderr cho quá trình stdout/stderr chính trong Java?
Làm cách nào chúng ta có thể đạt được cùng một hành vi trong Java?
thử đầu tiên của tôi là:
proc = Runtime.getRuntime().exec(cmd);
Nhưng nó sẽ không hoạt động. Dựa trên this answer và this answer, tôi đã thay thế mã với:
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectOutput(System.out);
pb.redirectError(System.err);
Nhưng điều này thậm chí không biên dịch, như các đối số không phù hợp với các thông số phương pháp dự kiến.
Bạn có nghĩa là tôi cần phải thực hiện một vòng lặp mà chỉ giữ đọc từ một dòng và viết trong một dòng khác? Xin lỗi, không khả thi. Quá nhiều công việc (có thể yêu cầu chạy trong một chủ đề mới, và nó giới thiệu rất nhiều điểm của các lỗi có thể). –
Có thể sử dụng được hay không điều này đã từng được yêu cầu. Tôi vừa kiểm tra java 7 api và có vẻ như nó đã được giải quyết - bây giờ bạn có thể gọi redirectOutput đi qua trong Redirect.INHERIT để có được những gì bạn muốn. – henry