从JAVA问题执行Unix系统命令
我在从JAVA代码执行系统命令时遇到了一个奇怪的问题。从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应用程序中获取
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调用该脚本,它正在工作。非常好,工作非常出色。