我在从 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 不仅仅是生锈,所以请温柔点。 ;-)
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 重定向等。
关于java - JAVA执行Unix系统命令问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200307/