有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

macos从JAVA执行Unix系统命令的问题

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

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

这很好用。如果我打印输出,这很酷。 但我想把这些信息写入plist文件,以备将来使用。为此,我使用了^{的-xml参数。比如

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

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

但这似乎没有写入任何文件

我错过什么了吗


共 (1) 个答案

  1. # 1 楼答案

    我的爪哇不仅生锈了,所以请温柔一点。;-)

    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重定向等