Estoy intentando imprimir el número de serie de mi mac [edit: Apple computer] en un programa java. Estoy familiarizado con el comando de UnixImprimir el número de serie de mi Mac en java con los comandos de Unix
ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'
que realiza esta tarea en la terminal.
cuando intento
String command = "ioreg -l | awk '/IOPlatformSerialNumber/ { print $4; }'"
Runtime terminal = Runtime.getRuntime();
String input = new BufferedReader(
new InputStreamReader(
terminal.exec(commands).getInputStream())).readLine();
System.out.println(new BufferedReader(
new InputStreamReader(
terminal.exec(command, args).getInputStream())).readLine());
no se imprime el número de serie. En su lugar se imprime:
<+-o Root class IORegistryEntry, id 0x100000100, retain 10>
Creo que el problema es que terminal.exec()
no pretende llevar a toda la cadena de comando. ¿Hay algo en Java similar al argumento shell = True
en Python's Popen(command, stdout=PIPE, shell=True)
que me permita pasar toda la cadena de comandos?
Gracias por la respuesta rápida, pero creo que no estaba perfectamente claro. Estoy tratando de imprimir el número de serie de mi computadora Apple, no mi dirección MAC. Tal vez me equivoqué con la publicación. –
ah, vale. En este caso, su uso de Runtime.exec podría ser lo más simple. Lo único que necesita cambiar es separar todos los argumentos y el comando y ponerlos todos en una cadena [] que se pasa a Runtime.exec como matriz. Sin embargo, no estoy seguro de si la canalización de la salida de un comando en otro comando realmente se puede hacer usando Runtime.exec, ya que esta es una función de shell y en realidad implica iniciar dos procesos, no uno. Sin embargo, podría ejecutar solo 'ioreg -l' en java y leer la salida completa, hacer el filtrado en java al iterar las líneas de salida y usar String.indexOf – BertNase