আমি প্রসেসবিল্ডারটি নীচে জাভাতে একটি প্রক্রিয়া তৈরি করছি:
ProcessBuilder pb = new ProcessBuilder()
.command("somecommand", "arg1", "arg2")
.redirectErrorStream(true);
Process p = pb.start();
InputStream stdOut = p.getInputStream();
এখন আমার সমস্যাটি হ'ল: আমি প্রসেসের স্টাডাউট এবং / অথবা স্টাডারের মধ্য দিয়ে যা যা চলছে তা ক্যাপচার করতে এবং এটিকে অবিচ্ছিন্নভাবে পুনর্নির্দেশ করতে চাই System.out
। আমি চাই যে প্রক্রিয়াটি এবং এর আউটপুট পুনঃনির্দেশটি পটভূমিতে চালিত হোক। এখনও অবধি, আমি এটি করার একমাত্র উপায়টি হ'ল ম্যানুয়ালি একটি নতুন থ্রেড স্পোন করা যা ক্রমাগত থেকে পড়তে হবে stdOut
এবং তারপরে উপযুক্ত write()
পদ্ধতিটি কল করবে System.out
।
new Thread(new Runnable(){
public void run(){
byte[] buffer = new byte[8192];
int len = -1;
while((len = stdOut.read(buffer)) > 0){
System.out.write(buffer, 0, len);
}
}
}).start();
এই পদ্ধতির কাজ যেমন ধরণের, এটি কিছুটা নোংরা অনুভব করে। এবং তার উপরে, এটি আমাকে পরিচালনা এবং সঠিকভাবে শেষ করতে আরও একটি থ্রেড দেয়। এটি করার আরও ভাল উপায় আছে কি?
org.apache.commons.io.IOUtils.copy(new ProcessBuilder().command(commandLine) .redirectErrorStream(true).start().getInputStream(), System.out);