我试图在java程序中打印我的Mac的[编辑:Apple计算机]序列号。我熟悉Unix命令使用Unix命令在java中打印我的Mac序列号
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(command, stdout=PIPE, shell=True)
中的参数shell = True
的Java中的东西,这将允许我传递整个命令字符串?
谢谢你的快速答案,但我认为我不是很清楚。我试图打印我的苹果电脑的序列号,而不是我的MAC地址。也许我错误地贴了帖子。 – 2011-04-21 06:56:20
啊,好的。在这种情况下,使用Runtime.exec可能是最简单的事情。唯一需要改变的是将所有参数和命令分开,并将它们全部放入一个作为数组传递给Runtime.exec的String []。但我不确定一个命令输出到另一个命令的管道是否可以使用Runtime.exec实际完成,因为这是一个shell功能,实际上涉及启动两个进程,而不是一个进程。你可以,但是在java中只执行'ioreg -l'并读取完整的输出,通过迭代输出行并使用String.indexOf – BertNase 2011-04-21 07:01:12