Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengalihkan Keluaran Proses Secara Asynchronously di Java?

Bagaimana untuk Mengalihkan Keluaran Proses Secara Asynchronously di Java?

Linda Hamilton
Linda Hamiltonasal
2024-11-18 08:20:02546semak imbas

How to Redirect Process Output Asynchronously in Java?

Pengalihan Output Tak Segerak untuk ProcessBuilder

Apabila melaksanakan proses dalam Java menggunakan ProcessBuilder, menangkap stdout dan stderr memerlukan pendekatan tanpa sekatan. Walaupun mencipta urutan untuk mengendalikan tugas ubah hala adalah pilihan, ia datang dengan kelemahan seperti pengurusan dan penamatan rangkaian.

ProcessBuilder.inheritIO

Dalam Java 7 dan ke atas , ProcessBuilder menawarkan kaedah inheritIO. Kaedah ini memudahkan pengalihan keluaran dengan menetapkan I/O standard subproses agar sejajar dengan proses Java semasa.

Process p = new ProcessBuilder().inheritIO().command("command1").start();

Sintaks ini mengubah hala stdout dan stderr dengan lancar ke konsol tanpa menyekat utas utama.

Java 6 dan Terdahulu

Untuk Java 6 dan versi terdahulu, penyelesaian yang lebih jelas diperlukan:

public static void main(String[] args) throws Exception {
    Process p = Runtime.getRuntime().exec("cmd /c dir");
    inheritIO(p.getInputStream(), System.out);
    inheritIO(p.getErrorStream(), System.err);
}

private static void inheritIO(final InputStream src, final PrintStream dest) {
    new Thread(new Runnable() {
        public void run() {
            Scanner sc = new Scanner(src);
            while (sc.hasNextLine()) {
                dest.println(sc.nextLine());
            }
        }
    }).start();
}

Dalam pelaksanaan ini, urutan baharu dihasilkan untuk membaca secara berterusan daripada stdin dan mengalihkan kandungannya ke destinasi yang dikehendaki. Apabila subproses selesai, urutan ditamatkan secara automatik sejak aliran input mencapai EOF.

Atas ialah kandungan terperinci Bagaimana untuk Mengalihkan Keluaran Proses Secara Asynchronously di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn