2012-06-27 100 views
0

我试图用JavaJava运行EXEC

Runtime.getRuntime().exec(command); 

令人惊讶的是与路径,目录和文件相关的一切使用系统EXEC做一些事情都不尽如人意

我不知道为什么和只是想知道是否有任何替代

+1

告诉我们你正在尝试做什么。那么只有我们可以给予适当的帮助 –

+2

*“'Runtime.getRuntime().exec(command);'令人惊讶的是......”*不对我。参见[Runtime.exec()不会](http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html)。此外,为了更快提供更好的帮助,请发布[SSCCE](http://sscce.org/)。 –

+0

例如cd(更改目录) –

回答

4

另一种方法是使用ProcessBuilder类,它有一个更简洁的界面,但是你的主要问题可能与操作系统如何处理命令行有关,并且没有太多的Java可以帮助你做到这一点。

2

如上所述,cd是shell内建的。即它不是可执行文件。您可以确定这一点使用:

$ which cd 
cd: shell built-in command 

,因为它不是一个独立的可执行文件,Runtime.exec()将无法​​用它做任何事情。

编写shell脚本来完成特定于shell的内容(例如更改工作目录),然后使用Runtime.exec()执行该shell脚本可能会更好。您可以在脚本中设置PATH变量等,并让Java简单地执行脚本。

捕捉人的一件事就是你必须使用你的脚本的stdout/stderr(即使你把它扔掉)。如果你不这样做,你的过程可能会阻止。有关更多详细信息,请参阅this SO answer

+0

很好,谢谢。我会试着弄明白。 shell脚本不是一个好主意我需要流 –

+0

你能否详细说一下。你的流评论? –

0

exec()方法可以带三个参数。第三个是你的子进程应该用作其工作目录的目录。无论如何,这解决了你的“cd”问题。