Pipes et Runtime.exec() en Java
Considérez le code Java suivant :
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); }
Le programme le résultat est :
/etc: adduser.co
Cependant, lorsqu'il est exécuté à partir du shell, il est correctement affiche :
lsb-release
Comportement des tuyaux multiplateformes
Comme mentionné dans la question, le comportement des tuyaux n'est pas multiplateforme. Les créateurs Java ne peuvent pas garantir que les canaux fonctionneront de manière cohérente sur différentes plates-formes.
Solutions alternatives
Pour résoudre ce problème, envisagez les options suivantes :
String[] cmd = { "/bin/sh", "-c", "ls /etc | grep release" }; Process p = Runtime.getRuntime().exec(cmd);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!