使用Unix命令在Java中打印Mac的序列号

我正在尝试在Java程序中打印Mac的[编辑:Apple计算机]序列号。我熟悉Unix命令


ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'

在终端中完成此任务。

当我尝试


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());

我的序列号未打印。而是打印:


<+-o Root class IORegistryEntry, id 0x100000100, retain 10>  

我认为问题是这terminal.exec()并不意味着要使用整个命令字符串。Java中是否有类似于shell = Truepython中的参数的东西Popen(command, stdout=PIPE, shell=True),可以让我传递整个命令字符串?


猛跑小猪
浏览 401回答 3
3回答

LEATH

Runtime.exec(..)不支持管道,因为它们是Shell的功能。相反,您必须自己模拟管道,例如String ioreg = toString(Runtime.exec("ioreg -l ").getInputStream());Process awk = Runtime.exec("awk '/IOPlatformSerialNumber/ { print $4;}'");write(awk.getOutputStream(), ioreg);String input = new BufferedReader(new InputStreamReader(awk.getInputStream())).readLine();另外,您当然可以将Shell作为进程运行

慕盖茨4494581

要通过Java获取MAC地址,可以使用java.net.NetworkInterface:NetworkInterface.getByName("xxx").getHardwareAddress()如果您不知道网络接口的名称(我在Linux上假定为'eth0'),则甚至可以使用遍历所有网络接口NetworkInterface.getNetworkInterfaces()。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java