Почему мой InputStream ProcessBuilder приводит к другим данным, чем из командной строки linux - PullRequest
0 голосов
/ 05 апреля 2020

Когда я запускаю следующую команду из командной строки Ubuntu 18.4:

sudo ./nuvgpio 47 1 > gpioresult-47.txt

Полученный файл содержит следующие данные:

Try 4E
ChipID_Hi=0xD2, ChipID_Lo=0x82.
2, GP48, data=0x00

Когда я запускаю процесс из Java, поток результатов не содержит последней строки.

import java.io.*;

/**
 * Run a command  line program (nuvgpio) to read/write the status of GPIO pins on a Jetway SBC.
 */
public class JetwayIODriver {

    private static int LED_PIN_NUMBER = 40;
    private static int COVER_PIN_NUMBER = 42;

    public static void main(String args[]) throws InterruptedException {

        try {
            String directoryStr = "/home/tester2/IdeaProjects/automation-framework/device-common-parent/device-io/src/";
            File dir = new File(directoryStr);

            ProcessBuilder builder = new ProcessBuilder();
            builder.directory(dir);
            builder.redirectErrorStream();
            int mode = 1;   // 1=read, 0=write
            builder.command("/bin/bash", "-c", "echo 'tester2' | sudo -S ./nuvgpio", Integer.toString(COVER_PIN_NUMBER), Integer.toString(mode));

            Process process = builder.start();
            InputStreamReader input = new InputStreamReader(process.getInputStream());
            BufferedReader reader = new BufferedReader(input);

            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println ("Stdout: " + line);
            }

            int exitCode = process.waitFor();
            input.close();
            System.out.println(String.format("GPIO process finished with exit code : %s", exitCode));

        } catch (FileNotFoundException fnf) {
            System.out.println(fnf.getMessage());
        } catch (Throwable t) {
            System.out.println(t.getMessage());
        }
    }
}

Вывод из Java:

Stdout: Try 4E
Stdout: ChipID_Hi=0xD2, ChipID_Lo=0x82.
GPIO process finished with exit code : 0

Одна странная вещь: когда я запускаю из командной строки и для вывода на консоль 3-я строка текста находится в той же строке, что и новое приглашение: enter image description here

Программа nuvgpio, похоже, не ставит разрыв строки в конце. Может ли это быть причиной, и если да, могу ли я вставить один в вывод процесса?

...