-6

当我用 gammu 和 java 创建 smsGateway 时,我遇到了这样的语法问题:

try {
        Process process = runtime.exec(pathGammu+" --config "+pathConfig+" TEXT phonenumber -text \'can i send?\' ");

        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);

        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException ex) {
        System.out.println("Error : " + ex.getMessage());
    }

当我运行该语法时,我得到来自 gammu 的响应“什么是参数:我发送?”...... gammu 假设“我可以发送吗?” 作为命令......它应该是一个字符串......我很困惑

4

2 回答 2

3

Runtime.exec 不像 shell 那样解析参数。使用将字符串数组作为参数的版本。

另见http://m.javaworld.com/jw-12-2000/jw-1229-traps.html

于 2013-06-03T06:51:52.963 回答
-1

我想'这里的转义是多余的,即你应该说

runtime.exec(pathGammu+" --config "+pathConfig+" TEXT phonenumber -text 'can i send?' ");

代替

runtime.exec(pathGammu+" --config "+pathConfig+" TEXT phonenumber -text \'can i send?\' ");

虽然我没有尝试运行您的代码,但我认为这有机会工作,因为现在'在运行命令行时确实传递给了操作系统。否则它会被操作系统转义,而不是像你想象的那样被 Java 转义。

但是,我建议您使用ProcessBuilder它为运行外部进程提供更方便和真正跨平台的 API:

ProcessBuilder pb = new ProcessBuilder();
pb.command(pathGammu, "--config",  pathConfig, "TEXT", "phonenumber", "-text", "can i send?");
Process proc = pb.start();
于 2013-06-03T07:21:36.830 回答