Когда я запускаю следующую команду из командной строки 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](https://i.stack.imgur.com/HjWaS.png)
Программа nuvgpio, похоже, не ставит разрыв строки в конце. Может ли это быть причиной, и если да, могу ли я вставить один в вывод процесса?