2012-06-01 45 views
0

我打电话给java.lang.Runtime.exec(...),但这似乎接受命令行作为数组,我想使用单个字符串。替代java.lang.Runtime.exec(),可以执行命令行为单个字符串?

如何使用单个字符串执行相同操作?

+2

有一个'Runtime.exec(String command)'方法,请参阅您的链接。每个使用'Runtime.exec(...)'的人都应该阅读:http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html –

+0

@PeterBagyinszki谢谢!现在唯一的问题是我确实想要设置当前目录,并将其作为单个命令运行。 – sorin

+0

还有一个方法:'exec(String command,String [] envp,File dir)' –

回答

0

当前无法使用命令行将系统命令调用为单个字符串,并且能够指定当前目录。

看来,Java API的缺少这个基本特征:)

的解决方法是使用数组版本,而不是字符串。

2

从链接的Javadoc:

envp - 字符串数组,其中每个元件在格式名=值,或null环境变量设置,如果子进程应该继承当前的环境处理。

因此,只需传递null作为第二个参数,环境就会被插入。

1

从文档:

envp - 字符串数组,其中每个元件在格式名环境变量的设置 = ,或null如果子进程应该继承的环境当前进程。

听起来好像你想通过null那个参数。

2

如果您通过null作为第二参数,当前环境将被继承。

如果要修改当前的环境下,可以从System.getEnv()这样构建它:

private static String[] getEnv() { 
    Map<String, String> env = System.getenv(); 
    String[] envp = new String[env.size()]; 
    int i = 0; 
    for (Map.Entry<String, String> e : env.entrySet()) { 
     envp[i++] = e.getKey() + "=" + e.getValue(); 
    } 
    return envp; 
} 

更新

您可以System.out.println(System.getenv("PATH"));

如果路径检查你的Java路径是好的,那就试试吧

String[] commands = new String[] { "bash", "-c", "python foo/bar.py" }; 
Runtime.getRuntime().exec(commands, null, new File("/workingDir")); 
相关问题