यह 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
आदेशों में से कोई भी प्रतिक्रिया नहीं है।
तो मेरा सवाल यह है कि: क्या आप उन धाराओं की प्रतिलिपि बनाने का विकल्प सुझा सकते हैं जो इंटरैक्टिव प्रक्रियाओं के साथ काम करेंगे?
सुझाव के लिए धन्यवाद। हालांकि 'IOUtil.copy()' स्ट्रीम के अंत तक पहुंचने तक बाहर नहीं निकलता है, इसलिए यह आपके कोड से अलग नहीं है जिसमें 'sh' के साथ समान समस्याएं हैं। – vitaut
Pls इस http://stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-java-inputstream-with-a-timeout/808795#808795 पर एक नज़र डालें –