Runtime.getRuntime()。exec适用于Linux

时间:2014-08-06 19:57:19

标签: runtime.exec

我知道已经提出了类似的问题,但我无法根据我的具体情况调整以前的答案,所以我非常感谢任何帮助。

我在Windows中使用以下代码,它完全正常。

try
{
Process protSpec = Runtime.getRuntime().exec(new String[]{"cmd", "/c", "obspectrophore -i Rv0001.fasta > Rv0001.spec" });
            protSpec.waitFor();
}
catch (Exception e1)
{
System.out.println(e1.toString());
e1.printStackTrace();
}

尝试将其改编为Linux,我剪切了上面代码的“cmd”,“/ c”以获得

    try
    {
    Process protSpec = Runtime.getRuntime().exec(new String[]{"obspectrophore -i Rv0001.fasta > Rv0001.spec" });
                protSpec.waitFor();
    }
    catch (Exception e1)
    {
    System.out.println(e1.toString());
    e1.printStackTrace();
    }

现在我收到错误消息

java.io.IOException: Cannot run program "obspectrophore -i Rv0001.fasta > Rv0001.spec": java.io.IOException: error=2, No such file or directory

任何解决这个问题的想法都将不胜感激。提前谢谢!

2 个答案:

答案 0 :(得分:0)

在环境中设置obspectrophore,以便可以从任何目录访问它,并确保用户具有执行权限。

答案 1 :(得分:0)

cmd /c的Linux等效项为sh -c。在这种情况下,命令语法是相同的:

Runtime.getRuntime().exec(new String[]{
    "sh", "-c", "obspectrophore -i Rv0001.fasta > Rv0001.spec" 
});

您尝试过的Linux命令没有通过命令解释器运行命令,这就是它失败的原因(这相当于将Java代码粘贴到DOS提示符中,希望DOS能够解决并运行它)。