不同的输出 - 在命令行中运行mathtext时以及使用apache-commons-exec从java程序执行命令时

时间:2012-05-24 17:54:49

标签: java apache-commons-exec

我正在尝试使用apache-commons-exec从java程序运行mathtext。问题是当我从java程序运行相同的命令并且通过shell运行它时,我得到不同的输出。 所以如果在shell中运行如下的mathtext:

./mathtext test.png "\$\frac{{\left( {{p^2} - {q^2}} \right)}}{2}\$"

在一个shell中我得到了完美的png 但是当我使用apache-commons-exec

运行相同的东西时
Map map = new HashMap();    

        map.put("target", new File(trgtFileName));
        DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
        Executor exec = new DefaultExecutor();
        exec.setWorkingDirectory(/*I set the working directory where the mathtext is*/);
        CommandLine cl = new CommandLine("./mathtext"); 
        cl.addArgument("${target}");
        cl.addArgument(latex);
        cl.setSubstitutionMap(map);
//      Logger.log4j.info("command is:::"+cl.toString());
        ExecuteWatchdog watchdog = new ExecuteWatchdog(5000);
        exec.setWatchdog(watchdog);
        exec.execute(cl,EnvironmentUtils.getProcEnvironment(),resultHandler);
        resultHandler.waitFor();

我得到的是图像,而不是等式,而是原始的TeX字符串:(

有人可以帮我解决这个问题吗?我想得到确切的输出。 感谢。

1 个答案:

答案 0 :(得分:1)

我弄清楚问题出在哪里:

$是unix shell的特殊字符,而不是java。因此,即使在命令行中输入需要转义$ like:

"\$\frac{{\left( {{p^2} - {q^2}} \right)}}{2}\$"

在java程序中我不需要在开头和结尾处转义'$'或放“(双引号)。我必须把命令放在:

$\frac{{\left( {{p^2} - {q^2}} \right)}}{2}$

希望这有助于某人:)

- Shankhoneer