Heim >Java >javaLernprogramm >Warum erzeugt Javas „Runtime.exec()' unerwartete Ergebnisse mit Pipes?
Pipes und Runtime.exec() in Java
Betrachten Sie den folgenden Java-Code:
String commandf = "ls /etc | grep release"; try { Process child = Runtime.getRuntime().exec(commandf); child.waitFor(); InputStream i = child.getInputStream(); byte[] b = new byte[16]; i.read(b, 0, b.length); System.out.println(new String(b)); } catch (IOException e) { e.printStackTrace(); System.exit(-1); }
Das Programm Die Ausgabe lautet:
/etc: adduser.co
Wenn es jedoch von der Shell ausgeführt wird, funktioniert es korrekt zeigt an:
lsb-release
Plattformübergreifendes Pipe-Verhalten
Wie in der Frage erwähnt, ist das Pipe-Verhalten nicht plattformübergreifend. Die Java-Entwickler können nicht garantieren, dass Pipes auf verschiedenen Plattformen konsistent funktionieren.
Alternative Lösungen
Um dieses Problem zu beheben, ziehen Sie die folgenden Optionen in Betracht:
String[] cmd = { "/bin/sh", "-c", "ls /etc | grep release" }; Process p = Runtime.getRuntime().exec(cmd);
Das obige ist der detaillierte Inhalt vonWarum erzeugt Javas „Runtime.exec()' unerwartete Ergebnisse mit Pipes?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!