java - JAVA执行Unix系统命令问题

标签 java macos system-information

我在从 JAVA 代码执行系统命令时遇到了一个奇怪的问题。
实际上,我想从我的 JAVA 应用程序中获取 Mac OSX 系统信息。
为此,我正在使用

Runtime.getRuntime().exec("system_profiler -detailLevel full");

这工作正常。如果我打印输出,它很酷。 但我想将此信息写入 plist 文件以供将来使用。为此我使用 system_profiler 的 -xml 参数。例如,

 String cmd = "system_profiler -detailLevel full -xml > "+System.getProperty( "user.home" )+"/sysinfo.plist";
 Process p = Runtime.getRuntime().exec(cmd); 

基本上这应该在当前用户主目录中创建一个 plist 文件。

但这似乎并没有向文件写入任何内容。

我是不是漏掉了什么?

最佳答案

我的 Java 不仅仅是生锈,所以请温柔点。 ;-)

  1. Runtime.exec() 不会自动使用 shell 来执行您传递的命令,因此 IO 重定向不会执行任何操作。

  2. 如果你只是使用:

    "/bin/sh -c system_profiler -detailLevel full > path/file.plist"
    

    然后字符串将被分词为:

    { "/bin/sh", "-c", "system_profiler", "-detailLevel", "full", ">", "path/file.plist" }
    

    这也行不通,因为 -c 只需要一个参数。

试试这个:

String[] cmd = { "/bin/sh", "-c", "system_profiler -detailLevel full > path/file.plist" };
Process p = Runtime.getRuntime.exec(cmd);

当然,您也可以使用 Process.getInputStream() 读取您的 Process 实例的输出并将其写入您想要的文件;因此完全跳过 shell、IO 重定向等。

关于java - JAVA执行Unix系统命令问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200307/

相关文章:

C# 赢。表格 - 如何从 "System Summary"获取 "msinfo32"

java - 如何从 MultilayerPerceptronClassifier 获取分类概率?

java - Spring JPA和Hibernate在调用save方法时不将实体保存到数据库

java - 将 bigint 转换为 long

java - 如何从html文本框在mysql表中插入记录?

objective-c - 使用 GCD 创建高优先级串行调度队列

ios - 无法使用默认值初始化结构

cocoa - glFlush() vs [[self openGLContext]lushBuffer] vs glFinish vs glSwapAPPLE vs aglSwapBuffers

java - 如何使用java获取处理器名称并注册到信息中?

python - 如何使用python找出CPU的数量