加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用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的输出.
>将命令包装在shell脚本中并执行exec():

#!/bin/sh
ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'

附录:作为使用ProcessBuilder的一个例子,并在Paul Cager之前加入一个有用的建议,这是第三种选择:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读