使用Unix命令在java中打印我的Mac序列号
发布时间:2020-12-15 22:43:39 所属栏目:安全 来源:网络整理
导读:我想在 java程序中打印我的mac [编辑:Apple计算机]序列号.我熟悉Unix命令 ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}' 这在终端完成了这项任务. 当我尝试 String command = "ioreg -l | awk '/IOPlatformSerialNumber/ { print $4; }'"Runtime
我想在
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()并不意味着采取整个命令字符串.在python的Popen(命令,stdout = PIPE,shell = True)中,java中是否存在类似于参数shell = True的内容,这将允许我传递整个命令字符串? 解决方法
我看到两种可能性:
>使用比如Scanner来解析ioreg -l的输出. #!/bin/sh ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}' 附录:作为使用 import java.io.BufferedReader; import java.io.InputStreamReader; public class PBTest { public static void main(String[] args) { ProcessBuilder pb = new ProcessBuilder("bash","-c","ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'"); pb.redirectErrorStream(true); try { Process p = pb.start(); String s; // read from the process's combined stdout & stderr BufferedReader stdout = new BufferedReader( new InputStreamReader(p.getInputStream())); while ((s = stdout.readLine()) != null) { System.out.println(s); } System.out.println("Exit value: " + p.waitFor()); p.getInputStream().close(); p.getOutputStream().close(); p.getErrorStream().close(); } catch (Exception ex) { ex.printStackTrace(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |