Có thể truyền đầu ra của một tiến trình được tạo bởi ProcessBuilder đến một tiến trình khác được tạo bởi ProcessBuilder khác không? Ví dụ: nếu tôi đang cố thực hiện lệnh shell này:đầu ra đường ống của ProcessBuilder đến một ProcessBuilder khác
ls | grep build.xml
Tôi nên làm điều đó với ProcessBuilder như thế nào?
như @erdinc đề nghị, tôi đã cố gắng này:
Process process = Runtime.getRuntime().exec("ls");
InputStream is = process.getInputStream();
byte[] buf = new byte[1000];
is.read(buf);
String parameter = new String(buf);
System.out.println("grep build " + parameter);
Process proc2 = Runtime.getRuntime().exec("grep build " + parameter);
InputStream is2 = proc2.getInputStream();
byte[] buf2 = new byte[1000];
is2.read(buf2);
String result = new String(buf2);
System.out.println("proc2 result: " + result);
nhưng nó tạo ra kết quả khác nhau so với khi tôi chạy kịch bản trực tiếp trong vỏ. Tôi đã làm sai ở đâu?
Giải quyết: Vui lòng xem giải pháp Philipp Wendler
giải pháp của bạn hoạt động! cảm ơn bạn Philipp: D Tôi thực sự sẽ sử dụng mã này để gọi một số ứng dụng bên ngoài như chasen và moses (công cụ dịch máy). Các ls | Ví dụ grep có nghĩa là chỉ để đơn giản hóa câu hỏi, nhưng cảm ơn cho đề nghị: D Tôi sẽ đánh dấu câu hỏi được giải quyết và upvote giải pháp của bạn. – ndriks