Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JAVA问题执行Unix系统命令_Java_Macos_System Information - Fatal编程技术网

从JAVA问题执行Unix系统命令

从JAVA问题执行Unix系统命令,java,macos,system-information,Java,Macos,System Information,我在从JAVA代码执行系统命令时遇到了一个奇怪的问题。 实际上,我想从我的JAVA应用程序中获取MacOSX系统信息。 为此,我使用 Runtime.getRuntime().exec(“system_profiler-detailLevel full”) 这很好。如果我打印输出,这很酷。 但是我想将这些信息写入一个plist文件以备将来使用。为此,我使用system\u profiler的-xml参数 String cmd = "system_profiler -detailLevel fu

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

Runtime.getRuntime().exec(“system_profiler-detailLevel full”)

这很好。如果我打印输出,这很酷。 但是我想将这些信息写入一个
plist
文件以备将来使用。为此,我使用
system\u profiler
的-xml参数

 String cmd = "system_profiler -detailLevel full -xml > "+System.getProperty( "user.home" )+"/sysinfo.plist";
 Process p = Runtime.getRuntime().exec(cmd); 
基本上,这应该在当前用户主目录中创建一个plist文件

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


我在这里遗漏了什么吗?

我的Java已经生锈了,所以请温柔一点。;-)

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

  • 如果您只是使用:

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

    Christian.K是绝对正确的。下面是一个完整的示例:

    public class Hello {
    
      static public void main (String[] args) {
        try {
          String[] cmds = {
            "/bin/sh", "-c", "ls -l *.java | tee tmp.out"};
          Process p = Runtime.getRuntime().exec (cmds);
          p.waitFor ();
          System.out.println ("Done.");
        }
        catch (Exception e) {
          System.out.println ("Err: " + e.getMessage());
        }
      }
    }
    
    如果您没有使用管道(
    |
    )或重定向(
    ),那么您可以使用原始命令中的
    字符串cmd=“ls-l*.java”

    如果您确实想在Java控制台窗口中查看任何输出,那么还需要调用
    Process.getInputStream()

    这里有一个很好的链接:

    您能再次检查user.home系统属性是否已设置吗?是的,它已设置。此外,我还尝试在家中创建一个shell脚本,并从JAVA调用该脚本,它正在工作。非常好,工作非常出色。